对不起,我觉得我的问题有一个更好的标题,但我想不出。
基本上,情况是这样的:我正在创建一个固定宽度的信息表。我在键列表中有一个 (k,v) 的列表。
完成后,“:”应该居中,并且应该有一个“|” 在最左边和最右边。
我的问题是,我有一些列表太长而无法固定在一行中。我要么需要能够拥有它,以便一旦列表中包含 x 个字符,它将开始一个新行,并将文本缩进到相同的级别,或者我需要能够将多个值编码为这样它们与相同的左侧填充对齐(或者我将拥有内容的“选项卡式”版本。
我到目前为止的一个例子:
def make_information_file(t):
pairs=[("SERiES","Game of Thrones"),("SiZE","47,196,930,048 bytes"),(AUDiO TRACKS,['English: DTS-HD Master Audio 5.1', 'French: DTS 5.1', 'Spanish: DTS 5.1', 'Polish: DTS 2.0', 'Spanish: DTS 2.0'])]
general_keys=["COLLECTiON NAME","UPC","RETAiL RELEASE DATE","REGiON","STUDiO"]
video_keys=["ViDEO","SOURCE","RESOLUTiON","ASPECT RATiO"]
audio_keys=["AUDiO FORMATS"]
subtitle_keys=["SUBTiTLES"]
all_keys=general_keys+video_keys+audio_keys+subtitle_keys
longest_key=(sorted(all_keys,key=len) or [""])[-1]
longest_key_length=len(longest_key)
left_padding=longest_key_length+5
right_padding=106-left_padding
empty_left_padding=left_padding+3
empty_right_padding=106-left_padding-3
line_formatter=lambda p: "|{field:>{left_padding}} : {value:<{right_padding}}|".format(field=p[0],value=p[-1],left_padding=left_padding,right_padding=right_padding)
现在,请注意,根据最长键的长度,所有内容都对齐,使得“:”位于固定点,其两侧各有一个空格,右侧文本向左对齐,并且这些东西向左对齐。
但是,“AUDiO TRACKS”列表太长,无法放在一行中。如果单词要将其推过它的限制,我可以让它自动拆分(我相信我的偏好,此时第二行(以及之后的任何行)将不得不缩进文本以与第一行保持一致行的文本。另一种选择是拥有它,以便我拥有它,以便每个值都以左侧的 empty_left_padding 为中心,然后是字符串值,然后是足够的空格,以便该行的最终长度是标准的 111 个字符长, 以“|”作为第一个和最后一个字符
desired_output=""""
| SERiES : Game of Thrones |
| SiZE : 47,196,930,048 bytes |
| AUDiO FORMATS : English: DTS-HD Master Audio 5.1, French: DTS 5.1, Spanish: DTS 5.1, |
| Polish: DTS 2.0, Spanish: DTS 2.0 |
| UPC : 883929191505 |
| RETAiL RELEASE DATE : 03-06-2012 |
| REGiON : A, B, C |
| STUDiO : HBO Home Video |
| ViDEO : 1080p 1.78:1 |
| SOURCE : BD50 |
| RESOLUTiON : 1080p |
| ASPECT RATiO : 16:9 |"""
所以,我不知道如何处理上面的“音频格式”案例(我对可用的字幕列表有同样的问题)。