2015-01-11 4 views
5

それぞれの列の最長文字列を考慮して手動でテーブルを作成しなければなりませんか?またはこれには組み込みメソッドがありますか?私はPythonテーブルを検索しましたが、問題に関連するものは何も見つかりませんでした。また、私が手動で入力したサンプルテーブルは、すべてのセル(適切に整列されていない)では対称ではありません。表の作成

問題の要点は、+ - |です。テーブルの作成。

どうすればよいですか?

答えて

3

組み込みの方法に最も近いものはstr.formatを使用している:

import csv 
with open("output.txt") as f: 
    lines = list(csv.reader(f,delimiter=",")) 
    # get longest string for alignment 
    mx_len = len(max((max(ele,key=len) for ele in lines),key=len)) 
    # transpose the list items 
    zipped = zip(*lines) 
    # get header/first row 
    row1 = zipped[0] 
    # how many "-" we need depends on longests word length 
    pattern = "-"*mx_len 
    f = ("+{pat}+{pat}+{pat}+".format(pat=pattern)) 
    print(f) 
    # pass in mx_len as align value 
    print("|{:<{i}}|{:<{i}}|{:<{i}}|".format(*row1,i=mx_len)) 
    print(f) 
    # print the rest of the transposed data excluding column 1/row1 
    for a, b, c in zipped[1:]: 
     print("|{:<{i}}|{:<{i}}|{:<{i}}|".format(a.rstrip(),b.rstrip(),c.rstrip(),i=mx_len)) 
    print(f) 

+------------+------------+------------+ 
|Colour  |Taste  |Smell  | 
+------------+------------+------------+ 
| Red  | Good  | Pleasant | 
| Black  | Bad  | Deceptive | 
| Blue  | Disgusting | Intolerable| 
+------------+------------+------------+ 

をファイルにしている正確にどのように多くのcolsのを知っているがなけれ:

with open("output.txt") as f: 
    lines = list(csv.reader(f, delimiter=",")) 
    mx_len = len(max((max(ele, key=len) for ele in lines), key=len)) 
    zipped = zip(*lines) 
    row1 = zipped[0] 
    ln = len(row1) 
    pattern = "-" * mx_len 
    f = (("+{pat}" * ln + "+").format(pat=pattern)) 
    print(f) 
    print(("|{:<{i}}" * ln + "|").format(*row1, i=mx_len)) 
    print(f) 
    for row in zipped[1:]: 
     print(("|{:<{i}}" * ln + "|").format(*row, i=mx_len)) 
    print(f) 

+------------+------------+------------+ 
|Colour  |Taste  |Smell  | 
+------------+------------+------------+ 
| Red  | Good  | Pleasant | 
| Black  | Bad  | Deceptive | 
| Blue  | Disgusting | Intolerable| 
+------------+------------+------------+ 
2

これはビルトインいますされていませんterminaltablesを使用することができます。

from terminaltables import AsciiTable 

with open('test.csv') as f: 
    table_data = [line.split(",") for line in f] 
    transposed = [list(i) for i in zip(*table_data)] 

print(AsciiTable(transposed).table) 

だけで行うインストールするには:

pip install terminaltables 
関連する問題