我有一个包含以下列的数据csv文件:‘number’
, ’colour’
, ’number2’
, ’foo’
, ’bar’
,看起来像这样:
12, red, 124, a, 15p
14, blue, 353, c, 7g
12, blue, 125, d, 65h
12, red, 124, c, 12d
我想要统计数字、颜色和数字2同时出现的次数。例如,以上列表的输出应为:'12,红色,124: 2','14,蓝色,353: 1','12,蓝色,125: 1'
。我是通过以下方式实现的:
import csv
datafile=open('myfile.csv','r')
usefuldata=[]
for line in datafile:
usefuldata.append(line)
from collections import Counter
outfile1=Counter((line[1],line[2],line[3]) for line in usefuldata)
print(outfile1)
这给我带来了:
Counter({(‘12’,’red’,’135’): 21, (‘15’,’blue’,’152’):18, (‘34’,’green’,’123’):16 etc})
这很不错,但是我想将它写入文件中。我希望该文件有4列:数字、颜色、数字2和计数。我意识到这是一个常见的问题,我尝试了其他线程上建议的几种不同方法,但都没有成功。
Newfile=open(‘newfile.csv’,’wb’)
fieldnames=['a','b']
csvwriter=csv.DictWriter(newfile, delimiter=',', fieldnames=fieldnames)
csvwriter.writerow(dict((fn,fn) for fn in fieldnames))
for row in outfile1:
csvwriter.writerow(row)
And
with open('newfile.csv','wb') as csvfile:
fieldnames=['number','colour','number2']
writer=csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow(Counter((line[1],line[2],line[3]) for line in usefuldata))
countwriter=csv.writer(csvfile, delimiter=', ')
countwriter.writerow(outfile1)
两者都给我错误提示
return self.writer.writerow(self._dict_to_list(rowdict))
TypeError: 'str' does not support the buffer interface
我也尝试使用pickle:
import pickle
with open('newfile.csv','wb') as outputfile:
pickle.dump(outfile1, outputfile)
给我生成了一些无用的文件。
我的当前尝试是使用
writer=csv.DictWriter(newfile, outfile1)
for line in outfile1:
writer.writerow(line)
但是这会给我一个有关字段名的错误。
我知道这是一个常见的问题,我也清楚我之所以只是在挣扎,是因为我真的不知道我在做什么——我已经好几年没有使用Python了,而且我忘记了很多东西。任何帮助都将不胜感激。