Python: 将计数器写入 csv 文件
Python: Writing Counter to a csv file
我有一个 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, 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 和计数。我意识到这是一个常见问题,我尝试了其他线程上建议的几种不同方法,但 none 奏效了。
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
than 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])
对我来说,上述解决方案不起作用。它将单词的所有字符拆分到单独的列中,因此输出是 "every character in a separate column followed by the count" 而不是一列中的整个单词,然后是计数。这可能是由于我可能犯的其他一些错误。
但是对我来说,下面的代码有效::
with open(outfile, encoding='utf-8-sig', mode='w') as fp:
fp.write('KMC,freq\n')
for tag, count in cnt.items():
fp.write('{},{}\n'.format(tag, count))
希望对其他人有所帮助
import csv
假设 count 是一个 Python 3 计数器。
如果 key 是一个字符串,不要将它拆分成它包含的每个字符:
with open(root+'counter_test.csv','w') as csvfile:
writer=csv.writer(csvfile)
for key, value in count.items():
writer.writerow([key] + [value])
甚至更简单(注意 's' 到 writerows() 函数):
with open(root+'counter_test.csv','w') as csvfile:
writer=csv.writer(csvfile)
writer.writerows(count.items())
只需使用 for 循环,我们就可以将序列计数器添加到 CSV 读取中
以下代码将显示 csv 文件的计数器
import csv
x=0
reader = csv.reader(open("c:/path/abc.csv"))
for raw in reader:
x += 1
print(raw)
print(x)
以上代码将显示这样的输出
['id', 'fname', 'lname']
1个
['1', 'a', 'x']
2个
['2', 'b', 'y']
3个
['3', 'c', 'z']
4
你可以使用这个简单的衬垫:
pd.DataFrame(Counter(my_list).most_common(), columns=["item", "count"]).to_csv("./myfile.csv")
Pandas 可以从字典创建一个 DataFrame
(和一个 Counter
),你必须在构造函数中为 DataFrame 指定列的名称(因此 columns=["item", "count"]
)
那么,DataFrameclass有一个简单的to_csv()
方法(调用这个方法时不妨使用index=False
)
我有一个 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, 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 和计数。我意识到这是一个常见问题,我尝试了其他线程上建议的几种不同方法,但 none 奏效了。
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
than 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])
对我来说,上述解决方案不起作用。它将单词的所有字符拆分到单独的列中,因此输出是 "every character in a separate column followed by the count" 而不是一列中的整个单词,然后是计数。这可能是由于我可能犯的其他一些错误。 但是对我来说,下面的代码有效::
with open(outfile, encoding='utf-8-sig', mode='w') as fp:
fp.write('KMC,freq\n')
for tag, count in cnt.items():
fp.write('{},{}\n'.format(tag, count))
希望对其他人有所帮助
import csv
假设 count 是一个 Python 3 计数器。
如果 key 是一个字符串,不要将它拆分成它包含的每个字符:
with open(root+'counter_test.csv','w') as csvfile:
writer=csv.writer(csvfile)
for key, value in count.items():
writer.writerow([key] + [value])
甚至更简单(注意 's' 到 writerows() 函数):
with open(root+'counter_test.csv','w') as csvfile:
writer=csv.writer(csvfile)
writer.writerows(count.items())
只需使用 for 循环,我们就可以将序列计数器添加到 CSV 读取中 以下代码将显示 csv 文件的计数器
import csv
x=0
reader = csv.reader(open("c:/path/abc.csv"))
for raw in reader:
x += 1
print(raw)
print(x)
以上代码将显示这样的输出
['id', 'fname', 'lname'] 1个 ['1', 'a', 'x'] 2个 ['2', 'b', 'y'] 3个 ['3', 'c', 'z'] 4
你可以使用这个简单的衬垫:
pd.DataFrame(Counter(my_list).most_common(), columns=["item", "count"]).to_csv("./myfile.csv")
Pandas 可以从字典创建一个 DataFrame
(和一个 Counter
),你必须在构造函数中为 DataFrame 指定列的名称(因此 columns=["item", "count"]
)
那么,DataFrameclass有一个简单的to_csv()
方法(调用这个方法时不妨使用index=False
)