2016-11-10 61 views
1

我使用的是计算给定文本文档中单词出现率的代码,现在我希望将输出保存为具有两列的csv文件:一个用于单词,一个用于频率。用两列|创建一个csv文件计数器模式

这是我试图复制代码:

from collections import Counter 
counter = Counter(['spam', 'egg', 'spam', 'egg', 'python', 'egg']) 

with open('wordfile.csv', 'w') as f: 
    writer = csv.writer(f, delimiter=' ') 
    writer.writerow(('word', 'count')) 
    writer.writerows(counter.most_common())  

然而,这是输出:

word countegg 3spam 2python 1 

,我试图让输出应该只包含两列(一个用于“单词”,另一个用于“频率”,并且每行应该包含文本及其在文本中的出现:

word, frequency, 
the, 3165, 
in, 1265, 
of,1233, 

当我打印的代码输出:

print(open('wordfile.csv', 'rb').read()) 

我得到:

b'word count\r\r\negg 3\r\r\nspam 2\r\r\npython 1\r\r\n') 

正如你可以看到有没有两列字和频率。 我使用Windows,这是我使用的Python版本:3.5.2 |蟒蛇4.1.1(64位)

+0

对于写CSV,它往往容易简单地使用[file.write()](HTTPS写的值://文档.python.org/2 /库/ stdtypes.html#file.write)。 – GreenMatt

回答

2

writer.writerow期待该行的列的列表;在你的片段中你传递了所有的结果,即。所有项目的所有列。

您需要在ITER向counter.items()得到你想要的结果:

import csv 
from collections import Counter 

counter = Counter(['spam', 'egg', 'spam', 'egg', 'python', 'egg']) 

with open('wordfile.csv', 'w', newline='') as f: 
    writer = csv.writer(f, delimiter=' ') 
    writer.writerow(('word', 'count')) 
    writer.writerows(counter.most_common()) 
+0

非常感谢您也可以使用'writerows'。 – amirouche

+0

通过使用counter.items()我得到一个错误:'列表'对象没有属性'项' –

+0

@ M.Huntz我修复了使用'.most_common()'和'writer.writerows'的代码与s '这就是你错过的。 – amirouche