【问题标题】:how to write two columns to a file from multiple input files如何从多个输入文件将两列写入文件
【发布时间】:2021-01-21 12:45:24
【问题描述】:

我有两个文件夹,每个文件夹包含五个文本文件(input1.txtinput2.txtinput3.txtinput4.txtinput5.txt)。我正在尝试从每个文本文件中读取第四列并将其写入输出文件 (output.txt)。我想在输出文件中有两列(第一列和第二列分别是文件夹 1 和文件夹 2 中的文本文件中的 5 个数字),但我的脚本只将一列写入输出文件。你知道如何修复我的代码以在输出文件中获取两列吗?

获得的输出:

0.12
0.17
0.54
0.79
1.15
2.24
3.51
4.01
5.08
6.22

期望的输出:

0.12 2.24
0.17 3.51
0.54 4.01
0.79 5.08
1.15 6.22

脚本:

# !/usr/bin/env python3
import os
import re

with open("output.txt", mode='w') as out:
    folders = ["folder1", "folder2"]
    for folder in folders:
        os.chdir(folder)     
        search_word = 'The result is:'
        for i in range(1, 6):
            with open('input'+ str(int(i)) + '.txt', mode='r') as infile:
                for lines in infile:
                    if search_word in lines:
                                
                        columns = lines.split()

            out.write( "%.2f\n" % (float(columns[4])))
        os.chdir("..")

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您会得到一列输出,因为您首先处理的是一个文件夹中的文件,然后是第二个文件夹中的文件。不会尝试从每个文件中整理数据。

    当您从文件中读取数据时,将数据收集到字典中,该字典使用文件夹名称作为键,并将从该文件夹中的文件中提取的数据作为值列表。

    defaultdict 很方便,因为它简化了创建列表字典的麻烦。处理完所有文件后,您可以轻松组合收集的数据并将其写入文件。

    下面是一些适合你的代码:

    import os
    import re
    
    from collections import defaultdict
    
    with open("output.txt", mode='w') as out:
        folders = ["folder1", "folder2"]
        data = defaultdict(list)    # create a dictionary with lists for values
        for folder in folders:
            os.chdir(folder)
            search_word = 'The result is:'
            for i in range(1, 6):
                with open('input'+ str(int(i)) + '.txt', mode='r') as infile:
                    for lines in infile:
                        if search_word in lines:
                            columns = lines.split()
                data[folder].append(float(columns[4]))    # add to the list for this folder
    
            os.chdir("..")
    
        # combine the data in the lists and write to output file
        for v1, v2 in zip(*data.values()):
            out.write(f"{v1:.2f} {v2:.2f}\n")
    

    【讨论】:

    • 谢谢。它工作正常。但是作为第二种方法,如果您可以使用zip 函数读取文本文件并将第四列写入使用join 函数的文件,那就太好了。希望你能做到并扩展/编辑你的答案。
    • @qasim:好主意。我会留给你去试一试。
    猜你喜欢
    • 2014-11-22
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多