我知道看来我的问题已经有了解决方案,但这不是我在其他学科上需要的。就是这样:
我有200个文件,每个文件有800行。文件的每一行包含800个数字。简而言之,每个文件都具有完全相同的格式。假设,为简单起见,我的文件就是这样的:
文件1:
28 56 72 50 01
65 41 20 18 00
文件2:
01 32 09 05 42
00 23 14 52 99
我需要做的是,将文件中相同位置的数字加起来,这意味着我需要这样的输出文件:
输出:
29 88 81 55 43
65 64 34 70 99
现在,我想做的是将每一行写到不同的文件中,但这会占用很多空间...
我不确定该怎么做。如果有人有任何建议,我愿意接受。谢谢
答案 0 :(得分:3)
首先,您可以加载一个文件,以获取文件的结构。这也将处理并非所有行都具有相同观察值的情况。然后,根据结构对所有文件和行进行操作,以添加单个值。
further_files = ['file 2']
sums = []
with open('file 1') as file:
for row in file:
sums.append(row.split())
for file in further_files:
with open(file) as open_file:
for i, row in enumerate(open_file):
sums[i] = [x + y for x, y in zip(sums[i], row.split())]
答案 1 :(得分:2)
假设您事先知道文件格式并具有文件名列表,则只需遍历文件并将总和累加到大小合适的列表中即可。
nrows, ncols = 2, 5 # 800, 800 in your real code
sums = [[0] * ncols for _ in range(nrows)]
file_names = ["file1.txt", "file2.txt"]
for file_name in file_names:
with open(file_name) as f:
for i, row in enumerate(f):
for j, col in enumerate(row.split()):
sums[i][j] += int(col)
for row in sums:
print(*row)
# 29 88 81 55 43
# 65 64 34 70 99
或者使用numpy.loadtxt
:
import numpy as np
sum(np.loadtxt(file_name, dtype=int) for file_name in file_names)
# array([[ 29, 88, 81, 55, 43],
# [ 65, 64, 34, 70, 99]])
答案 2 :(得分:2)
使用numpy
例如:
import os
import numpy as np
result = {}
base_path = r"PATH_TO_FILES"
for filename in os.listdir(base_path): #Iterate each file
filename = os.path.join(base_path, filename)
with open(filename) as infile: #Open file for read
for i, line in enumerate(infile):
if i not in result:
result[i] = np.array(line.split(), dtype=int)
else:
result[i] = result[i] + np.array(line.split(), dtype=int) #sum lines
for k, v in result.items():
print(v)
输出:
[29 88 81 55 43]
[65 64 34 70 99]