我有几个文件在.csv-20000记录或更多
基本上,这很容易——就像这样:
numer,produkt,date
202,produkt A its sad,20.04.2019
203,produkt A its sad,21.04.2019
204,produkt A its sad,22.04.2019
etc
我要打印信息:
“produkt A its sad”出现6次 “产品B”出现3次 “产品C”出现两次
基于另一个关于堆栈溢出的答案,我写道:
import csv
from collections import Counter
with open ('base2.csv', encoding="utf8") as csv_file:
csv_reader = csv.reader(csv_file)
produkt = [row[0] for row in csv_file]
for (k,v) in Counter(produkt).items():
print ("A %s appears %d times" % (k, v))
我是python的新手,所以这可能有点愚蠢:)
输出为:
A n appears 1 times
A 2 appears 11 times
我从csv_文件而不是csv_读取器中读取
所以produkt=[row[0]for row in csv_file]本质上是说从文件中读取每一行并存储为row,然后获取该行的第一个字符
我将csv_文件替换为csv_阅读器及其作品
感谢@chrisdoyle
在
produkt = [row[0] for row in csv_file]
中,变量row
是字符串类型,row[0]
只是第0个字符。我已经用row.split(",")[1]
替换了它,并得到了预期的答案您的问题是,当您使用列表理解来构建产品列表时,您是从文件而不是CSV阅读器对象中读取的
表示读取文件的每一行,并将该行一次存储在变量名行中,然后从该行获取该行包含的字符串的第一个字符(索引0)
相反,假设您希望produkt是字段1,您应该将此行更新为
虽然这也会读取标题行,但由于您有标题,我将使用dictReader并选择您感兴趣的列名,如:
这样就可以清楚地知道你的计数是哪一列,而不必仅仅使用数字索引
相关问题 更多 >
编程相关推荐