如何在 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]))
我正在尝试使用代码 [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]))