【问题标题】:Python TypeError: 'str' does not support the buffer interfacePython TypeError:'str'不支持缓冲区接口
【发布时间】:2014-08-09 06:35:39
【问题描述】:

我的以下代码运行良好,然后开始抛出此错误。我有一个 csv 文件,我正在尝试向其中写入一行。虽然其他解决方案涉及首先将内容转换为字节字符串,但由于我使用的是 csv,我不确定我能做到这一点。

代码:

def saveFile():
    with open('data.csv','wb') as out:
        csv_out=csv.writer(out)
        csv_out.writerow(['Domain:','Mail Server:','TLS:','# of Employees:','Verified:'])
        for row in root.pt.get_rows():
            #csv_out.writerow(row)
            print (row)

错误:

Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__
    return self.func(*args)
  File "C:/Users/kylec/Desktop/DataMotion/Python/MailChecker.py", line 93, in saveFile
    csv_out.writerow(['Domain:','Mail Server:','TLS:','# of Employees:','Verified:'])
TypeError: 'str' does not support the buffer interface

【问题讨论】:

    标签: python string csv buffer


    【解决方案1】:

    在 Python 3 中,csv 模块希望您在文本模式下给它一个文件:

    with open('data.csv', 'w', newline='') as out:
    

    newline='' 参数让csv 模块控制换行符的写入方式(在 Python 2 中您以二进制模式打开文件的原因)。

    来自csv.writer() documentation

    如果csvfile是一个文件对象,它应该用newline=''打开。

    [...]

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

    因为你给了模块一个二进制模式的文件,你只能写bytesdata给它。

    【讨论】:

    • 我知道,这不就是 wb 的用途吗?
    • @Kyle:在 Python 2 中,您必须以二进制模式打开文件,是的。但这不是 Python 2。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2016-11-21
    • 2016-08-20
    相关资源
    最近更新 更多