【问题标题】:.writerow() csv returns a number instead of writing rows.writerow() csv 返回一个数字而不是写入行
【发布时间】:2012-09-28 00:34:54
【问题描述】:

我正在使用 Python 3 测试一些非常简单的代码。出于某种原因,以下代码生成了一个空输出,而不是写一行

import csv

output = open('hello world.csv', 'w',newline='')
wr = csv.writer(output, quoting=csv.QUOTE_ALL)

wr.writerow('hello world')

如果我在解释器中尝试命令,.writerow() 返回一个数字。下面的例子就是documentation page中使用的那个:

>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w', newline=''), delimiter=' ',
... quotechar='|', quoting=csv.QUOTE_MINIMAL)
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
40
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
37

【问题讨论】:

    标签: python csv python-3.x


    【解决方案1】:

    writerow 实际上会写入行,但由于文件缓冲,您在eggs.csv 中看不到它们。要查看文件中的某些内容,请关闭它或调用.flush() 方法。如果您使用with-statement,即使出现错误,文件也会自动关闭。

    没有记录 (report a bug?) 但writerow 返回fileobj.write() 方法的结果,即在这种情况下写入文件的字符数。

    您应该将形成一行的字段序列传递给writerow 方法:

    writer.writerow(['field 1', 'field 2', 'etc'])
    

    如果你传递一个字符串而不是一个列表,那么该字符串将被解释为一个字段序列,其中每个字段都是一个单独的字符:

    #XXX this is probably not what you want, don't do it
    writer.writerow('abc')
    # -> a,b,c
    

    【讨论】:

    • 使用writer.writerow(list)时是否可以抑制number of characters的返回?我想知道这是因为如果它是一个大文件,python 终端会被数字填满。对此有任何想法吗?
    • @bioinfoboy:为了抑制输出,分配给一个虚拟变量:_ = writer.writerow(row)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多