Python:创建一个文件,其中包含来自多个文件的最大值列表

Python: Create a file with a list of max values from multiple files

我在一个目录中有几个文件,每个文件由相同大小的数字列组成。比方说5个数字。我想使用 Python 创建的新文件也应该是一列 5 个数字,但是这个文件中的每个数字都是它在所有其他文件中的位置的最大值。

因此,为了证明这一点,请考虑我拥有的 3 个文件,其中包含上述 5 个数字。

文件 1:列 (1 2 3 4 5) 文件 2:专栏(7 3 8 1 5) 文件 3:列 (2 3 6 8 3)

然后,

新文件:列(7 3 8 8 5)

谢谢

如果我理解你的问题,我建议创建一个包含 5 个条目的字典,并为每个文件更新最大数量(按行索引) 例如:

def get_max_vector():
    all_files = ["file1.txt", "file2.txt"]
    lines_dict = {}
    for i in range(5):
        lines_dict[i] = -1
    for file_name in all_files:
        with open(file_name, "r") as fp:
            i = 0
            for line in fp:
                line = line.replace('\n', '')
                n = int(line)
                lines_dict[i] = max(lines_dict[i], n)
                i += 1
    for i in range(5):
        print(f"max number in line {i} is {lines_dict[i]})

此示例假设每个文件恰好有 5 行长,每行包含一个正数并且至少有 1 个文件。您可以根据需要添加额外的检查,但这对您来说应该是一个好的开始

此代码不允许不合格的输入文件,但显示了您可以考虑使用的策略。它假定相关的输入文件位于您当前的工作目录中,并且都具有 .txt 扩展名。结果将写入同一目录,但使用的文件名 而不是 具有 .txt 扩展名,以防您 运行 它不止一次。假设 Python 3.8+

import glob

cols = [0] * 5
for infile in glob.glob('*.txt'):
    with open(infile) as f:
        for i, v in enumerate(f.read().split()):
            if (_v := int(v)) > cols[i]:
                cols[i] = _v
with open('result.res', 'w') as out:
    print(*cols, file=out)

numpy 非常适合这种处理:

>>> import numpy as np
>>> data = [np.loadtxt('%d.txt'%i, dtype=np.int) for i in [1,2,3]]
>>> np.max(data, axis=0)
array([7, 3, 8, 8, 5])