Python:创建一个包含多个文件的最大值列表的文件



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

因此,为了演示这一点,考虑我有3个文件,它们由前面提到的5个数字组成。

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

,

新建文件:Column(7 3 8 8 5)

感谢

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])

如果我理解你的问题,我建议创建一个字典和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行长,每行包含一个正数,并且至少有一个文件。您可以根据需要添加其他检查,但这应该是一个良好的开端

这段代码不考虑不符合标准的输入文件,但展示了一种您可以考虑使用的策略。它假设相关的输入文件位于当前工作目录中,并且扩展名为.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)

相关内容

最新更新