CSV模块的编写者不会让我写出二进制文件

发布于 2021-01-29 16:15:38

我试图在打开文件时仅使用’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)

我认为可以使用,但仍然会出现以下错误:“ dataWriter.writerow(rowData)”行上的“
TypeError:必须是字节或缓冲区,而不是str”。

任何帮助将不胜感激。谢谢。

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您似乎正在运行Python3.x。 有关对csv文件使用二进制模式的建议适用于Python2.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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看