Python类型错误:'str'不支持缓冲区接口

0 投票
1 回答
11054 浏览
提问于 2025-04-18 10:17

我有一段代码,之前运行得很好,但现在开始出现错误了。我有一个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

1 个回答

3

在Python 3中,csv模块需要你以文本模式打开文件:

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

这里的newline=''参数让csv模块可以控制换行符的写入方式(这也是为什么在Python 2中你需要以二进制模式打开文件的原因)。

根据csv.writer()的文档

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

[...]

如果没有指定newline='',那么在被引号包围的字段中的换行符可能会被错误处理。而在使用\r\n作为换行符的系统上,写入时会多出一个\r。所以,始终指定newline=''是安全的,因为csv模块会自己处理换行符。

如果你给模块的是一个以二进制模式打开的文件,那么你只能写入bytes数据

撰写回答