【问题标题】:Create a csv file with two columns | Counter mode创建一个包含两列的 csv 文件 |计数器模式
【发布时间】:2016-11-10 15:43:36
【问题描述】:

我编写了一个代码,用于计算给定文本文档中单词的出现次数,现在我想将输出保存在一个包含两列的 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 |Anaconda 4.1.1(64 位)

【问题讨论】:

  • 对于写入 CSV,使用file.write() 简单地写入值通常更容易。

标签: python python-3.x csv counter


【解决方案1】:

writer.writerow 期待该行的列列表;在您的 sn-p 中,您正在传递所有结果,即。所有项目的所有列。

您需要遍历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())

【讨论】:

  • 谢谢你也可以使用writerows
  • 通过使用 counter.items() 我得到一个错误:'list' object has no attribute 'items'
  • @M.Huntz 我修复了代码以使用 .most_common()writer.writerowss 这就是你所缺少的。
  • @M.Huntz:要获取逗号作为分隔符,请删除 delimiter=' ' 参数(逗号是默认值)。
  • 这是使用码字的输出,count,egg,3spam,2python,1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2022-10-22
  • 1970-01-01
  • 2021-04-19
  • 2020-09-08
  • 1970-01-01
相关资源
最近更新 更多