如何在numpy savetxt中使用fmt对齐每一列的信息

Mar*_*ark 1 python numpy

我发现了其他人对 fmt 的使用,并试图使其适应我的目的。但是,尽管在这里阅读了它,但我还是不明白:http : //docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html。我希望我的数据在我保存的文本文件中的每一列中居中(或者让它看起来以某种方式组织起来,老实说,只要列以某种方式对齐我不在乎)。现在我让第一行左对齐,然后我的数据之间有均匀的空间。由于我数组中的每个条目的长度都不相同,这会导致数据发生偏移。如何对齐每列中的条目?

import numpy as np
my_list =['str123456789', 'str2', 'str3']
my_list2=[1,2458734750,3]
my_array=np.array(my_list)
my_array2=np.array(my_list2)
combined=np.column_stack([my_array,my_array2])
np.savetxt('test_file_name.txt', combined, fmt='{0: ^{1}}'.format("%s", 12))
Run Code Online (Sandbox Code Playgroud)

它在整体之间提供了均匀的空间,但我希望条目对齐。

左对齐或右对齐都可以。一条评论建议使用 {0:<{1}} 或 {0:>{1}} 代替 {0: ^{1}};然而,这并没有以任何不同的方式对齐我的数据。

我猜 .format("%s", 12) 使每个字符串为 12 个字符(在没有字符时添加空白字符),导致对齐问题。但是,如果我编写 .format("%s"),则会出现错误。fmt='%s',正在工作,但同样没有对齐。

Pad*_*ham 6

你可以在没有 str.format 的情况下做到这一点:

np.savetxt('test_file_name.txt', combined, fmt="%-12s")
Run Code Online (Sandbox Code Playgroud)

输出:

str123456789 1           
str2         2458734750  
str3         3           
Run Code Online (Sandbox Code Playgroud)

-左对齐,12是宽度。您需要指定一个与数组中最长元素一样长或更长的宽度。

为了解释您自己的尝试,您将数据居中,^最小宽度为 12 个字符,但这不会对齐每列。