【问题标题】:Merging a specific column from multiple text files into one file将多个文本文件中的特定列合并到一个文件中
【发布时间】:2019-03-26 05:54:35
【问题描述】:

我在每个文件夹中有多个文件夹和一个文本文件 (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

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以做一些事情来使您的程序正确且“更符合 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")
    

    【讨论】:

    • 谢谢。每个input.txt 文件中还有两行以@#symbols 开头。如何在每个输入文件中排除这些行?
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多