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

2024-10-01 15:41:47 发布

您现在位置: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和通道1的数据 filename2.txt应该只生成列Time和通道2的数据 filename3.txt应该只生成列Time和通道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数据怎么了?


Tags: columns数据intxtforinputtimeas
3条回答

只是个提示。在第二个with语句之后,添加

input.seek(0)

也能做到。

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()

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

相关问题 更多 >

    热门问题