-1

我在一个目录中有几个文件,每个文件中包含相同大小的数字列。比方说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)

谢谢

4

3 回答 3

0

如果我理解您的问题,我建议创建一个包含 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 个文件。您可以根据需要添加其他检查,但这对您来说应该是一个好的开始

于 2021-10-05T12:38:50.410 回答
0

此代码不允许不符合标准的输入文件,但显示了您可以考虑使用的策略。它假定相关输入文件位于您当前的工作目录中,并且都具有 .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)
于 2021-10-05T13:00:14.573 回答
0

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])
于 2021-10-05T14:21:28.500 回答