【发布时间】:2019-03-31 00:25:48
【问题描述】:
因此,在使用格式说明符解决了多个关于对齐的问题后,我仍然无法弄清楚为什么数字数据会以波浪方式打印到标准输出。
def create_data(soup_object,max_entry=None):
max_=max_entry
entry=dict()
for a in range(1,int(max_)+1):
entry[a]={'Key':a,
'Title':soup_object[a].div.text.strip(),
'Link':soup_object[a].div.a['href'],
'Seeds':soup_object[a](attrs={'align':'right'})[0].text.strip(),
'Leechers':soup_object[a](attrs={'align':'right'})[1].text.strip()}
yield entry[a]
tpb_get_data=tuple(create_data(soup_object=tpb_soup.body.table.find_all("tr"),max_entry=5))
for data in tpb_get_data:
print('{0} {1:<11} {2:<25} {3:<25} '.format(data['Key'], data['Title'], data['Seeds'],data['Leechers']))
我尝试使用带有格式说明符的 f 字符串,但它仍然以以下方式打印数据,有人可以帮我解决这个问题。
1 Salvation.S02E11.HDTV.x264-KILLERS 262 19
2 Salvation.S02E13.WEB.x264-TBS[ettv] 229 25
3 Salvation.S02E08.HDTV.x264-KILLERS 178 21
4 Salvation.S02E01.HDTV.x264-KILLERS 144 11
5 Salvation.S02E09.HDTV.x264-SVA[ettv] 129 14
我已经阅读了大部分关于此的问题,我想知道是否有一种原始方法,而不是使用像 tabulate 这样做得很好的库。但我也想学习如何在没有任何库的情况下做到这一点。
【问题讨论】:
-
您选择了奇怪的数字进行对齐。当这些字符串的长度至少为 34 时,为什么是
1:<11?试试'{0} {1:<40} {2:<3} {3:<2}'。 -
另外,这些不是 f-strings!使用f-strings,您将拥有
print(f'{data['Key']} {data['Title']:<40} {data['Seeds']:<3} {data['Leechers']:<2}') -
@Georgy 我对格式很陌生,因此我不知道这些数字的作用。我知道那些不是 f-strings,我也使用过它们,但没有在此处发布它们。感谢您的意见。
标签: python python-3.x terminal string-formatting text-alignment