gpt4 book ai didi

Python:将计数器写入 csv 文件

转载 作者:太空狗 更新时间:2023-10-30 01:14:05 24 4
gpt4 key购买 nike

我有一个 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

我想计算 number、color 和 number2 一起出现的次数,例如,上面列表的输出将是:'12, red, 124 :2','14, blue, 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)

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 以来已经有几年了,我已经忘了这么多。任何帮助将不胜感激。

最佳答案

首先说主要问题的原因——

TypeError: 'str' does not support the buffer interface

是您以二进制模式打开文件,您应该以文本模式打开文件(没有 b )。

其次,我会说使用普通的 csv.writer 会更容易比csv.DictWriter()在你的情况下,因为你的字典的创建方式。

将结果写入 csv 的方法是 -

#Assuming you have previously created the counter you want to write
#lets say you stored the counter in a variable called cnter
with open('newfile.csv','w') as csvfile:
fieldnames=['number','colour','number2','count']
writer=csv.writer(csvfile)
writer.writerow(fieldnames)
for key, value in cnter.items():
writer.writerow(list(key) + [value])

关于Python:将计数器写入 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com