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

问题描述:

嗨伙计们我输入一个文件名.txt并产生多个输出文件filename1.txt,filename2.txt和filename3.txt。更具体地讲这里是FILENAME.TXT输入数据:输入一个文本文件,并在Python中写入多个输出文件

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应该只生产列时间和频道1 filename2.txt应该只生产列时间的数据和通道2 filename3的数据.TXT应该只生产列时间和频道的数据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])) 

编译我得到的文本文件文件名1,文件名2和filename3但只有数据文件名1。 文件名2和文件名3数据发生了什么变化?

+0

你应该回去接受一些或所有问题的答案。有关更多信息,请参阅meta上的此答案:http://meta.stackexchange.com/a/5235/166957 – 2012-03-06 23:03:50

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

+0

谢谢,刚开始使用Python。爱它比C更好。 – guiNachos 2012-03-03 00:26:58

您只读取一次输入,但尝试遍历所有行三次。您可以打开全部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() 

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

+0

谢谢这有助于。我只是意识到我只读过一次,但写了三次。 “j”变量是否有一些含义? – guiNachos 2012-03-03 00:26:28

+0

nope。我的错误是,在修改代码时,我在那里留下了“j”。答案已更新 – mgibsonbr 2012-03-03 00:30:14

只是一个提示。第二with声明后,加

input.seek(0) 

也可以做的伎俩。