Python类型错误:'str'不支持缓冲区接口
我有一段代码,之前运行得很好,但现在开始出现错误了。我有一个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中你需要以二进制模式打开文件的原因)。
如果csvfile是一个文件对象,它应该以
newline=''
的方式打开。[...]
如果没有指定
newline=''
,那么在被引号包围的字段中的换行符可能会被错误处理。而在使用\r\n
作为换行符的系统上,写入时会多出一个\r
。所以,始终指定newline=''
是安全的,因为csv
模块会自己处理换行符。
如果你给模块的是一个以二进制模式打开的文件,那么你只能写入bytes
数据。