Python 3.1.3 Win 7:csv writerow错误"必须是字节或缓冲区,而不是str"

ste*_*eve 4 python python-3.x

有一个简单的脚本在我的Win xp机器上在Python 2.7.1下完美运行.现在有了一台带有python 3.1.3的win 7机器.

代码是:

owriter.writerow(dtime[1][1])

dtime[1][1]=['30-Aug-10 16:00:00', '2.5', '15']
Run Code Online (Sandbox Code Playgroud)

收到此错误消息: TypeError: must be bytes or buffer, not str

我应该做些什么改变?

谢谢.

Mar*_*nen 16

在Python 2.X中,需要使用'b'打开csvfile,因为csv模块执行自己的行终止处理.

在Python 3.X中,csv模块仍然执行自己的行终止处理,但仍需要知道Unicode字符串的编码.打开csv文件进行写入的正确方法是:

outputfile=open("out.csv",'w',encoding='utf8',newline='')
Run Code Online (Sandbox Code Playgroud)

encoding可以是你需要的任何东西,但newline=''抑制文本模式换行处理.在Windows上,如果不这样做,将写入\ r \n \n \n文件行结尾而不是正确的\ r \n.这仅在3.X csv.reader文档中提到,但csv.writer也需要它.


Len*_*bro 6

您可能需要以文本模式打开文件.如果没有,请包含足够的代码,以便它可以运行并演示问题.

  • @steve所以拿掉'b`标志.CSV文件不是二进制文件,应以文本模式打开. (2认同)