我在这里遇到一个小问题,我试图从多个文件中总结条目(50),每个文件包含3列。例如,使用前3个文件:file1.txt,file2.txt,file3.txt,如下所示:
FILE1.TXT:
2 3 4
1 5 6
5 4 7
FILE2.TXT:
1 2 1
2 3 2
4 3 1
file3.txt:
6 1 1
1 3 0
3 4 5
所以我的问题是如何总结50个文件中第一列,第二列和第三列的所有条目,最后得到一个看起来像的文件:
output.txt的:
9 6 6
4 11 8
12 11 13
我已经阅读了50个文件并附加了它们,但是我实际上无法逐个汇总这些条目。
所以我做到了:
for p in range(50):
locals()['first_col%d' % p] = []
locals()['second_col%d' % p] = []
locals()['third_col%d' % i] = []
for i in range(1,50):
f = open("file"+str(i)+".txt","r")
for line in f:
locals()['fist_col%d' % i].append(float(line.split()[0]))
locals()['second_col%d' % i].append(float(line.split()[1]))
locals()['third_col%d' % i].append(float(line.split()[2]))
f.close()
我正在尝试一种方法将其置于一个循环中,该循环将读入所有first_cols
(first_col1
,first_col2
,first_col3
等) ,second_cols
和third_cols
并总结条目。
答案 0 :(得分:1)
您可以使用glob
通配符匹配文件名模式,然后明智地使用zip
和滥用literal_eval
(可能只想考虑将生成器转换为{{而不是) - NB - 这需要为每个文件提供相同数量的列和行,否则会发生截断:
int
答案 1 :(得分:0)
在初始化具有空值的容器之后,我有一个对每个文件的文件求和的解决方案:
>>> import os
>>> def sum_files(path):
result = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for fil in os.listdir(path):
full_path = os.path.join(path, fil)
for line_nb, line in enumerate(open(full_path)):
numbers = line.split()
for col_nb, nb in enumerate(numbers):
result[line_nb][col_nb] += int(nb)
return result
>>> sum_files(path)
[[9, 6, 6], [4, 11, 8], [12, 11, 13]]
答案 2 :(得分:0)
这是您的代码段
try:
output_matrix=[[0,0,0],[0,0,0],[0,0,0]]
for i in range (1,51):
try:
f = open("file"+str(i)+".txt","r")
except IOError, e:
continue
if not f:
continue
counter=0
for line in f:
row=line.split()
for row_item in range(0,len(row)):
output_matrix[counter][row_item]=output_matrix[counter][row_item]+int(row[row_item])
counter=counter+1
f = open("Output.txt","w")
for i in range (0,len(output_matrix)):
for j in range (0,len(output_matrix[i])):
f.write(str(output_matrix[i][j]) + ' ')
f.write('\n')
f.close()
except Exception,e:
print str(e)