我有多个文件,数据写在两列中,如下所示:
asp 1.88
gln 3.10
arg 0.99
his 1.11
和
asp 0.99
gln 1.11
arg 0.08
his 0.01
等等。
我想做的是将它们相加并写入一个新文件,如下所示:
asp 2.87
gln 4.21
arg 1.07
his 1.12
我尝试通过导入 Counter
但效果不佳。我也试过这样:
inp = ('c"/users/ansm/desktop/xx.txt','r').read().strip().split('\n')
inp2 = ('c"/users/ansm/desktop/xyz.txt','r').read().strip().split('\n')
c = Counter(inp)
d = Counter(inp2)
print c+d
但此代码不会将值相加。
有没有不使用 Counter
的其他方法?我正在使用 glob.iglob
在整个文件夹中迭代 .txt
格式的文件,然后想处理它们以获得上述结果。使用 Counter
是最有效的方法还是其他更好的方法?
使用此构造创建计数器:
c = Counter(dict((x.split()[0], float(x.split()[1])) for x in inp))
d = Counter(dict((x.split()[0], float(x.split()[1])) for x in inp2))
结果 c+d
将是:
Counter({'gln': 4.21, 'asp': 2.87, 'his': 1.12, 'arg': 1.07})
EDIT 许多文件:
s = Counter()
for filename in glob.iglob('*.txt'):
with open(filename, 'r') as f:
for line in f:
k, v = line.split()
s[k] += float(v)
print s
with open('sum.txt', 'w') as f:
for k, v in sorted(s.iteritems()):
f.write('{0} {1}\n'.format(k, v))
我是一名优秀的程序员,十分优秀!