申し訳ありませんが、私の質問にはもっと適切なタイトルがあるような気がしますが、思いつきません。
基本的に、状況は次のとおりです。固定幅の情報テーブルを作成しています。キーのリストに k の (k,v) のリストがあります。
完了すると、「:」が行の中央に配置され、「|」が表示されます。左端と右端にあります。
私の問題は、長すぎて 1 行にまとめられないリストがいくつかあることです。リストが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)
ここで、最長のキーの長さに応じて、「:」が固定ポイントに配置され、その両側に 1 つのスペースがあり、右のテキストが左に右揃えになるように、すべてが整列されていることに注意してください。左揃えで左に。
ただし、「AUDiO TRACKS」リストは長すぎて 1 行に収まりません。単語がその限界を超えてプッシュしようとしている場合は、自動的に分割することもできます (私の好みでは、2 行目 (およびそれ以降の行) は、最初の行とインラインに保つためにテキストをインデントする必要があると思います)行のテキスト. もう1つのオプションは、すべての値が左に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 |"""
そのため、上記の「AUDiO FORMATS」のケースに対処する方法がわかりません (利用可能な字幕のリストにも同じ問題があります)。