2016-10-27 24 views
1

私は、コードを使ってforループでtxtファイルにデータを書き込むしようとしている[パイソン]:Pythonで左揃えのテキストで.txtファイルに書き込む方法は?

f = open('top_5_predicted_class.txt', 'w') 
    f.write('Predicted Classes' + '\t\t' + ' Class Index' + '\t' + ' Probability' + '\n\n') 

    for i in range(0, 5): 
     f.write("%s \t \t %s \t \t %s \n" % (labels[top_k][i], top_k[i], out['prob'][0][top_k][i])) 
    f.close() 

しかし、私が得た出力は私が期待していたものではありませんでした。クラスインデックスをすべて左揃えにしたいと思っています。

output

私はこれを行うことができる方法の任意のアイデア?予測されるクラスの長さが固定されていないため、問題が存在すると思います。

答えて

2

入力が異なる長さのときに動作が予測できないため、この種の配置にはタブを使用しないでください。各列の最大長を知っている場合は、format関数を使用してスペースを埋め込むことができます。これはしかし、純粋程度表示ある

>>> for a,b,c in [('a','b','c'), ('d','e','f')]: 
...  print ("{: <15} {: <15} {: <15}".format(a, b, c)) 
... 
a    b    c 
d    e    f 

:私の例では、私は15個のスペースを使用しています。データの格納に心配がある場合は、PythonのcsvモジュールなどのCSV形式を使用する方がはるかに良いでしょう。

0

あなたはあなたのデータを通過し、最大フィールド幅を取得してから、すべてを揃えるためにそれらを使用することができます。

data = [ 
    ['tabby, tabby cat', 281, 0.312437], 
    ['tiger cat', 282, 0.237971], 
    ['Egyption cat', 285, 0.123873], 
    ['red fox, Vulpes vulpes', 277, 0.100757], 
    ['lynx, catamount', 287, 0.709574] 
] 

max_class_width = len('Predicted Classes') 
max_index_width = len('Class Index') 
max_proba_width = len('Probability') 

for entry in data: 
    max_class_width = max(max_class_width, len(entry[0])) 
    max_index_width = max(max_index_width, len(str(entry[1]))) 
    max_proba_width = max(max_proba_width, len(str(entry[2]))) 

print "{1:<{0}s} {3:<{2}s} {5:<{4}}".format(max_class_width, 'Predicted Classes', 
               max_index_width, 'Class Index', 
               max_proba_width, 'Probability') 

for entry in data: 
    print "{1:<{0}s} {3:<{2}s} {5:<{4}}".format(max_class_width, entry[0], 
                max_index_width, str(entry[1]), 
                max_proba_width, str(entry[2])) 

出力を使用でき

Predicted Classes  Class Index Probability 
tabby, tabby cat  281   0.312437 
tiger cat    282   0.237971 
Egyption cat   285   0.123873 
red fox, Vulpes vulpes 277   0.100757 
lynx, catamount   287   0.709574 

printfスタイルの書式設定を使用します。

print "%-*s %-*s %-*s" % (max_class_width, 'Predicted Classes', 
          max_index_width, 'Class Index', 
          max_proba_width, 'Probability') 

for entry in data: 
    print "%-*s %-*s %-*s" % (max_class_width, entry[0], 
           max_index_width, str(entry[1]), 
           max_proba_width, str(entry[2])) 
関連する問題