Np.savetxt 将标题与列对齐

Posted

技术标签:

【中文标题】Np.savetxt 将标题与列对齐【英文标题】:Np.savetext align header with columns 【发布时间】:2017-12-11 16:44:13 【问题描述】:

我正在尝试保存一个包含大量数字的数据文件并包含一个标题。我坚持将标题与相应的列对齐。示例代码:

import numpy as np
import os

Output = np.empty((0,3), int)

for i in range(30):
    Values = 10e6 * np.random.random((1,3))
    Output = np.vstack((Output, Values))

header = 'A\tB\tC'
np.savetxt('Output.txt', Output, delimiter='\t', newline=os.linesep,
            header=header, comments='')

我的输出是:

但是我想要'A'、'B'和'C'与列对齐,即:

我怎样才能做到这一点?感谢您的帮助。

【问题讨论】:

您必须创建一个具有正确间距的标题字符串。默认fmt%10.5f。所以你的header 必须考虑到这一点。记住\t 只是下一个制表符的空格(8 个空格);这是相对的,不是绝对的。 【参考方案1】:

标题的格式必须与列的格式相匹配

例如,使用 3 列和 %10.5f 格式,每行格式为:

In [185]: fmt = '\t'.join(['%10.5f']*3)
In [186]: fmt
Out[186]: '%10.5f\t%10.5f\t%10.5f'

所以一个数字行将被写为:

In [187]: fmt%tuple(np.random.random(3))
Out[187]: '   0.83330\t   0.90960\t   0.07613'

对应的header 将是:

In [188]: '%10s\t%10s\t%10s'%('A','B','C')
Out[188]: '         A\t         B\t         C'

In [189]: header = '%10s\t%10s\t%10s'%('A','B','C')
In [193]: np.savetxt('test.txt', np.random.random((2,3)),  delimiter='\t', heade
     ...: r=header, fmt='%10.5f') 
In [194]: cat test.txt
#          A             B           C
   0.55919     0.55277     0.47236
   0.93945     0.50398     0.56320

默认fmt在签名行中给出

np.savetxt(fname, X, fmt='%.18e', delimiter='', newline='\n', header='', footer='', cmets='#')

这更难匹配,因为它只指定小数点的数量,而不是总宽度。

【讨论】:

@STJ,你有没有发现不需要硬编码的东西?

以上是关于Np.savetxt 将标题与列对齐的主要内容,如果未能解决你的问题,请参考以下文章

使用带有标题的 np.savetxt 保存结构化的 numpy 数组

np.savetxt()——将array保存到txt文件,并保持原格式

如何将特定元素与列小部件内的左侧对齐

numpy如何保存(存储)和读取数据?(.npy/.npz)np.save() np.savez() np.savetxt()

HIghcharts 列标记未与列对齐

2Numpy常用函数