用Python将数据文件按列组织的有效方法

2024-03-29 10:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个程序的输出数据文件,它看起来像这样,每个时间步有多行:

0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00 \n   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00
7.9819E-06   1.7724E-02   2.3383E-02   3.0048E-02   3.8603E-02   4.9581E-02 \n  5.6635E-02   4.9991E-02   3.9052E-02   3.0399E-02
....

我想把它分成十列

我制作了一个Python脚本,使用正则表达式删除\n适当的行,但我认为应该有一种更简单更优雅的方法来执行此操作,下面是我的脚本:

^{pr2}$

Tags: 方法程序脚本数据文件时间pr2
3条回答

您可以在每一行(或一组客户机)上使用split()来生成一个字符串列表,每个字符串包含一个数字,使用<string>.join(<list_of_numbers>)将它们连接到一个新行中。在

你可以试试简单的

single_list = []
with open(your_file) as f:
    for line in f.readlines():
        single_list.extend(line.rstrip().split())

list_of_rows = [single_list[i*10:i*10+10] for i in range(len(single_list)//10)]

with open(output_file) as f:
    for line in list_of_rows:
        f.write(' '.join(line) + '\n')

如果所有数据都可以作为单个字符串读取(使用data = f.read()),则还可以:

^{pr2}$

并如上所述使用single_list。在


如果输入文件很大,并且创建临时列表时出现内存问题,可以尝试以下操作:

    with open(input_file,'r') as inpf, open(output_file,'w') as outf:
        writable = []
        for line in input_file:
            row = line.rstrip().split()
            writable.extend(row)
            while len(writable) >= 10:
                outf.write(" ".join(writable[:10]) + "\n")
                writable = writable[10:]

我能想到的最简单的解决方案就是使用numpy:

file = np.genfromtxt('file',unpack=True,names=True,dtype=None)

你得到的是一本你能用的字典

^{pr2}$

或者,如果您有标题,请使用:

print file['header']

相关问题 更多 >