包含多个列的大文件,通过使用文件名和值

时间:2016-10-09 18:57:02

标签: python

提前感谢您的回答! 我有很多包含列的文件。 我想在多个文件中分别导出所有列。 此外,我想使用每列的第一个值作为文件名的索引。

例如。如果我有“test_.dat”文件,其中包含3列:

12 54 159

2 9 87

5 99 201

... ...

91 1 777

我想要三个文件:“test_12.dat”,“test_54.dat”& “test_159.dat”。 “test_12.dat”在哪里:

2

5

...

...

91

我知道我需要考虑两个循环(一个用于初始文件),另一个用于读取/导出列。 我只知道如何使用附加,但这是一个非常耗时的方法。 我非常感谢你的支持。 这是我的尝试:

从文件夹中找到所有“.dat”:

for fname in glob.glob(‘test_*.dat’):
    temp=numpy.loadtxt(fname,skiprows=2)
    data.append(temp)



namefiles=glob.glob('test*.dat')

将所有列附加在一起(非常长的步骤):

for i in range (len(nomfichier)):
    for k in range (1,nbrechi+1):
        for j in range (points):
            ikj.append(data[i][j][k])

定义两个变量来分割变量(点数是行数)

seq2=[ikj[i:i+points] for i in range(0, len(ikj), points)]
chunks = [ikj[points*i:points*(i+1)] for i in range(len(ikj)/points + 1)]

导出特定文件中的列:

for j in range(len(nomfichier)):
    for i in range(len(seq2)/len(namefiles)):
            z=z+1
            savetxt(namefiles[j][:-4] + « _number_ » + str(flattened[i]) + ".dat", zip(firstcolumn,seq2[z]))
            print(namefiles[j][:-4] + « _number_ » + str(flattened[i]))
            zz.append(z)

2 个答案:

答案 0 :(得分:1)

一种简单的方法是使用pandas读取大文件,它专为大数据处理而设计。

要阅读数据,请使用以下内容:

import pandas as pd

df = pd.read_csv('test.bat', sep='\s', engine='python', header=None)

要将列保存为单个文件,您可以使用以下代码:

for ci in df.columns.values:
    data = df[ci]
    data.to_csv('test_{}.bat'.format(data[0]))

您可以根据bat文件中使用的内容更改sep。 pandas的defualt是一个逗号,但在这种情况下,就像在你的示例数据中一样,我使用了空格。希望它有所帮助!

答案 1 :(得分:0)

fps_out = []
with open('test_.dat', 'r') as fp_in:
    for line in fp_in:
        if not fps_out:
            for data in line.split():
                fps_out.append(open('test_%s.dat' % data, 'w'))
        else:
            for pos, data in enumerate(line.split()):
                fps_out[pos].write(data + '\n')

for fp in fps_out:
    fp.close()