如何在 python 中写入左对齐文本的 .txt 文件?

How to write to .txt file with left align text in python?

我正在尝试使用代码 [python]:

在 for 循环中将数据写入 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()

但是我得到的输出不是我所期望的。我想让 class 索引和概率都左对齐。

知道我该怎么做吗?我猜问题的存在是因为预测的 classes 的长度不固定。

您不应该使用制表符进行这种对齐,因为当您的输入长度不同时,行为是不可预测的。如果你知道每一列的最大长度是多少,你可以使用 format 函数来填充空格。在我的示例中,我使用 15 个空格:

>>> 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

虽然这纯粹是关于 显示。如果您担心存储数据,最好使用 CSV 格式,例如 Python 的 csv 模块。

您可以浏览数据并获得最大字段宽度,然后使用它们对齐所有内容:

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]))