[英]How to write multiple output text file from multiple input text file with different name by using glob.glob in python?
[英]Input a text file and write multiple output files in 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应该只产生时间和通道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]))
编译后,我得到了文本文件filename1,filename2和filename3,但是只有filename1中的数据。 filename2和filename3数据发生了什么?
for line in input
的行会耗尽input
文件中的所有行。 如果您想再次浏览文件,则必须重新加载文件并从头开始重新开始...或先将它们复制到另一个列表中。
您只读取了一次输入,但是尝试遍历所有行三次。 您可以打开所有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()
(在这种情况下,您也必须手动处理异常)
只是一个小费。 在第二个with
语句之后,添加
input.seek(0)
也可以做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.