我正在尝试通过csv.DictReader获取csv文件并将其转换为字典.执行此操作后,我想修改字典的其中一列,然后将数据写入tsv文件.我正在处理文本中的单词和单词频率.
我已经尝试使用dict.value()函数来获取字典值,但是我收到一条错误消息,说"AttributeError:DictReader实例没有属性"值""
以下是我的代码:
#calculate frequencies of each word in Jane Austen's "Pride and Prejudice"
import csv
#open file with words and counts for the book, and turn into dictionary
fob = open("P&P.csv", "r")
words = csv.DictReader(fob)
dict = words
#open a file to write the words and frequencies to
fob = open("AustenWords.tsv", "w")
#set total word count
wordcount = 120697
for row in words:
values = dict.values()
print values
Run Code Online (Sandbox Code Playgroud)
基本上,我有文本中每个单词的总数(即"a","1937"),我想找到有问题的单词使用的总字数的百分比(因此,对于"a",百分比将是1937/120697.)现在我的代码没有这样做的公式,但是我希望,一旦我获得每一行的值,就用一个字和一个字来写新行的文件.计算百分比.如果有人有更好的方式(或任何方式!)这样做,我将非常感谢任何输入.
谢谢
mat*_*nam 14
要回答基本问题 - "我为什么会收到此错误" - 当您致电时csv.DictReader()
,返回类型iterator
不是a Dictionary
.
迭代器中的每个ROW Dictionary
都可以用于脚本:
for row in words:
values = row.values()
print values
Run Code Online (Sandbox Code Playgroud)
Nat*_*oor 13
感谢Matt Dunnam的回答(我会回答它,但我不知道如何).csv.DictReader对象,非常违反直觉,不是字典对象(虽然我认为我开始看到一些有用的原因).正如他所说,csv.DictReader对象是一个迭代器(我的介绍级别为python,我认为这可能就像一个列表).该对象中的每个条目(不是字典)都是字典.
因此,csv.DictReader返回类似字典列表的内容,这与返回一个字典对象不同,尽管名称不同.
到目前为止,最好的是csv.DictReader确实在第一行保留了我的键值,并将它们正确地放置在许多字典对象中,这些对象是它实际返回的可迭代对象的一部分(同样,它没有返回字典对象!).
我已经浪费了大约一个小时敲打这个,文档不够清楚,虽然现在我知道csv.DictReader返回什么类型的对象,文档更清晰.我认为文档说的是它如何返回一个可迭代对象,但是如果你认为它返回一个字典并且你不知道字典是否可迭代,那么这很容易被读作"返回一个字典对象".
文档应该说"这不会返回一个字典对象,而是返回一个包含每个条目的字典对象的可迭代对象"或者其他一些东西.作为一个没有20年编码的蟒蛇新手,我一直遇到文档由专家编写的问题,而且对于初学者来说它太密集了.
我很高兴它就在那里,而且人们已经把时间花在了它上面,但它可以让初学者更容易,同时又不会降低它对专业pythonistas的价值.
归档时间: |
|
查看次数: |
10304 次 |
最近记录: |