python - CSV 模块的作者不让我写出二进制文件

标签 python csv python-3.x

我试图在打开文件时只使用“w”标签,但它使行间距加倍,导致读取无效。所以我发现更改为“wb”将是正确的格式。现在我正在使用 'wb' 标志,我无法让 csv.writer.writerow() 工作。我已经对我所有的字符串进行了编码,但我不知道为什么我总是收到这个错误。我看到的所有问题都说 b'string here' 或 myString.encode('ascii') 解决了我得到的错误,但它并没有为我解决。这是我所拥有的:

    dataWriter = csv.writer(open(fileName, 'wb'))
    for i in range(self.ui.table.rowCount()):
        rowData = [self.ui.table.item(i,0).text().encode('utf-8')\
        ,self.ui.table.item(i,1).text().encode('utf-8')\
        ,self.ui.table.item(i,2).text().encode('utf-8')\
        ,self.ui.table.item(i,3).text().encode('utf-8')\
        ,self.ui.table.item(i,4).text().encode('utf-8')]
        dataWriter.writerow(rowData)

我认为这是可行的,但它仍然给我以下错误: “TypeError:必须是字节或缓冲区,而不是 str” 在“dataWriter.writerow(rowData)”这一行。

如有任何帮助,我们将不胜感激。 谢谢。

最佳答案

您似乎正在运行 Python 3.x。 关于对 csv 文件使用二进制模式的建议适用于 Python 2.x。3.x 不需要编解码器模块——只需在打开时使用 encoding=whatever文件。 3.x 需要的是用 newline='' 打开文件。这适用于阅读和写作,尽管没有记录写作(错误报告已提交)。在解决你的双倍间距问题后,这将起作用:

import csv
data = [
    ['\xfforick', 123.456],
    ['polonius', 987.564],
    ]
with open('demo.csv', 'w', newline='', encoding='utf8') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)

输出文件的内容:

>>> open('demo.csv', 'rb').read()
b'\xc3\xbforick,123.456\r\npolonius,987.564\r\n'
>>>

建议:考虑一下代码的易读性......而不是

for i in range(self.ui.table.rowCount()):
    rowData = [self.ui.table.item(i,0).text().encode('utf-8')\
    ,self.ui.table.item(i,1).text().encode('utf-8')\
    ,self.ui.table.item(i,2).text().encode('utf-8')\
    ,self.ui.table.item(i,3).text().encode('utf-8')\
    ,self.ui.table.item(i,4).text().encode('utf-8')]
    dataWriter.writerow(rowData)

尝试

table = self.ui.table
for i in range(table.rowCount()):
    row = [table.item(i, j).text() for j in range(5)]
    writer.writerow(row)

关于python - CSV 模块的作者不让我写出二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358322/

相关文章:

python长数数据丢失

python - 合并公共(public)列匹配的两个 csv 文件

python - 大型平面平行板电容器内的简单摆

python - python中的ffmpeg xstack布局

python - 如何从 XPath 函数返回文本片段?

python - 使用带有 ffmpeg 的 Popen 时的空行输出

Python NtQueryDirectoryFile(文件信息结构)

python - 如何在 Pandas 数据框中显示汉字?

javascript - 将 CSV 文件读取为 HTML 下拉列表

linux - 如何在自定义Linux(特别是树莓派)上添加启动屏幕