输入文本文件并在Python中编写多个输出文件

时间:2012-03-03 00:09:31

标签: python

嗨大家好我正在输入一个filename.txt并生成多个输出文件filename1.txt,filename2.txt和filename3.txt。这里更具体的是filename.txt中的输入数据:

Time(ms)  Channel 1  Channel 2  Channel 3
0.0       4.5        3.6        125
1.0       3.0        3.4        98
2.0       100        3.0        59
3.0       23         45.9       2.1
4.0       34         123        35
5.0       2.1        222        98

filename1.txt应该只生成列Time和Channel 1的数据 filename2.txt应该只生成列Time和Channel 2的数据 filename3.txt应该只生成列Time和Channel 3的数据

源代码:

with open('filename.txt', 'r') as input:
    for i in range(1,4):
        with open('filename%i.txt' %i, 'w') as output:
            for line in input:
                columns = line.strip().split()
                for j in range(1,4):
                    output.write('{:10}{:10}\n'.format(columns[0], columns[j+1]))

编译我得到文本文件filename1,filename2和filename3但只有filename1中的数据。 filename2和filename3数据怎么了?

3 个答案:

答案 0 :(得分:4)

for line in input耗尽了input文件中的所有行。如果你想再次浏览文件,你必须重新加载文件并重新开始...或者先将它们复制到另一个列表。

答案 1 :(得分:4)

你只读过一次输入,但试图遍历所有行三次。您可以打开所有3个输出并同时写入所有输出,或打开输入3次(每个输出文件一次)。最佳方法取决于您的具体要求(文件大小,输出文件数等)。

打开3次会产生更干净的代码,但效率可能会降低:

for i in range(1,4):
    with open('filename.txt', 'r') as input:
        with open('filename%i.txt' %i, 'w') as output:
            for line in input:
                columns = line.strip().split()
                output.write('{:10}{:10}\n'.format(columns[0], columns[i]))

如果没有with子句,一次打开所有输出文件的通用解决方案会更好:

files = [open('filename%i.txt' %i, 'w') for i in range(1,4)]
with open('filename.txt', 'r') as input:
    for line in input:
        columns = line.strip().split()
        for j in range(1,4):
            files[j-1].write('{:10}{:10}\n'.format(columns[0], columns[j]))
for f in files:
    f.close()

(在这种情况下,您也必须手动处理异常)

答案 2 :(得分:2)

只是小费。在第二个with语句后,添加

input.seek(0)

也可以做到这一点。