条目总和,Python

时间:2013-02-05 17:00:57

标签: python

  

可能重复:
  summing up values of columns from multiple files

我在这里遇到一个小问题,我试图从多个文件中总结条目(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_colsfirst_col1first_col2first_col3等) ,second_colsthird_cols并总结条目。

3 个答案:

答案 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)