【问题标题】:Printing a counter to csv file in Python error在 Python 错误中将计数器打印到 csv 文件
【发布时间】:2016-12-14 03:57:33
【问题描述】:

我似乎在打印 csv 文件的计数器时遇到了问题。我试过关注Python: Writing Counter to a csv fileHow do you write a counter to a file in order?Python: Writing a dictionary to a csv file with one line for every 'key: value' 的线程,但似乎我一直在遇到问题。

我的计数器格式如下:

>>> print(daysCounter)
Counter({'03/08/2016': 246, '13/12/2016': 220, '22/01/2016': 198, '20/09/2016': 191})

计数器要大得多,但这给出了格式化的想法。

现在当我尝试使用时(之前已导入 csv):

   with open('lifetime_edits.csv', 'wb') as csv_file:
        writer = csv.writer(csv_file)
        for key, value in daysCounter.items():
            writer.writerow([key, value])

我得到错误:

Traceback (most recent call last):
  File "contribs.py", line 138, in <module>
    lifetime_analysis(data)
  File "contribs.py", line 91, in lifetime_analysis
    writer.writerow([key, value])
TypeError: a bytes-like object is required, not 'str'

所以我假设我只是没有正确使用某些东西,并且完全无法理解正在发生的事情。如果有人能对我遇到此问题的原因以及可能的解决方法有所了解,我将不胜感激。

请注意,这样做的最终目标是让上述计数器打印到以下格式的文件:

03/08/2016,246
13/12/2016,220
22/01/2016,198
20/09/2016,191

非常感谢您的关注和时间。

【问题讨论】:

    标签: python csv dictionary counter


    【解决方案1】:
    with open('lifetime_edits.csv', 'wb') as csv_file:
    

    这需要一个字节输入,你用'b'模式打开文件,只需使用'w'模式,这个模式默认输入是str:

    with open('lifetime_edits.csv', 'w') as csv_file:

    推荐方式:

    with open('lifetime_edits.csv', 'w', newline='') as csv_file:
    

    如果未指定 newline=”,则在引用字段中嵌入换行符 将无法正确解释,并且在使用 \r\n 的平台上 linendings on write 额外的 \r 将被添加。指定 newline=” 应该总是安全的,因为 csv 模块自己做 (普遍的) 换行处理。

    【讨论】:

    • nnnnngggghhhhhh,是的,这解决了问题。谢谢你澄清它。我不确定它是否相关,但似乎在这个 csv 文件中,每一行之间都有一个空行。这是正常行为吗?
    • 代码工作正常,我不确定是不是系统问题,但在文档中,有一种安全的方法可以做到这一点,我更新了代码
    • 太棒了,这个添加去掉了换行符。下次我会把它保存在 ind 中。感谢您的宝贵时间!
    猜你喜欢
    • 2019-04-29
    • 2020-02-22
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多