将多个文本文件中的特定列合并到一个文件中

时间:2019-03-26 05:54:36

标签: python

我有多个文件夹,每个文件夹中都有一个文本文件(input.txt)。首先,我从f_names.txt中读取文件夹名称,然后进入每个文件夹,并从每个文件夹中的input.txt中读取第三列。该代码可以正常工作,直到此处。问题在于代码将输出文件(combine.txt)中一行的所有第三列合并。而我想将每第三列作为新列写入输出文件(combine.txt)。我该怎么办?

这是我的代码:

#!/usr/bin/python
import os
import re

path=os.getcwd()

try:
    os.remove("combine.txt")
except OSError:
    pass

with open('combine.txt', mode='a') as outfile:
    with open('f_names.txt', 'r') as read_f:
        for line in read_f:
            os.chdir(line.strip())
            with open('input.txt', 'r') as f:
                data=[]
                for line in f:
                    row = line.split()
                    data.append(float(row[2]))
                    outfile.write("%.2f\n" % float(row[2]))
            os.chdir("..")

获得的输出(用于两个输入文件):

2.12
3.15
4.18
8.45
2.10
0.12
0.18
0.32
0.21
0.13

所需的输出(用于两个输入文件):

2.12 0.12
3.15 0.18
4.18 0.32
8.45 0.21
2.10 0.13

1 个答案:

答案 0 :(得分:2)

您可以采取一些措施来使程序正确并“具有更多的Python风格”。

with open('f_names.txt') as read_f:
    # Collect the third columns in a list
    data = []
    for line in read_f:
        # No need to chdir()
        with open('{}/input.txt'.format(line.strip())) as f:
            # This is one column
            data.append([float(line.split()[2]) for line in f])

# Do not remove the old file, overwrite it
with open('combine.txt', 'w') as outfile:    
    # "Transpose" the list of columns into a list of rows
    # Write each row
    for row in zip(*data):
        # Use new-style formatting
        outfile.write(" ".join("{:.2f}".format(cell) for cell in row) + "\n")