Python:向csv fi写入计数器

2024-10-02 20:43:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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, red, 124 :2’,’14, blue, 353: 1’, ’12, blue, 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)

以及

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

我也试过用泡菜:

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了,我已经忘记了这么多。任何帮助都将不胜感激。


Tags: csvinforlinecounter数字bluered