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