Python 3.1.3 Win 7: csv writerow 错误"必须是字节或缓冲区,而不是字符串
我有一个简单的脚本,在我的Windows XP机器上用Python 2.7.1运行得很好。
现在我换了台Windows 7的机器,装的是Python 3.1.3。
代码是:
owriter.writerow(dtime[1][1])
dtime[1][1]=['30-Aug-10 16:00:00', '2.5', '15']
但是我遇到了这个错误信息:TypeError: must be bytes or buffer, not str
我应该做哪些修改呢?
谢谢。
3 个回答
0
改成 str.encode("ascii")
。
重点是,Python 2.x 里,str
类型有点混用,既可以用来存储 字节缓冲区,也可以用来存储 字符字符串。而在 Python 3.x 中,我们有了更好的 Unicode 支持,字节缓冲区现在是一个独立的类型。你可以通过 str.encode()
和 bytes.decode()
进行转换,每次都需要指定一个 字符编码 作为参数。
16
在Python 2.X中,打开csv文件时需要加上'b',因为csv模块会自己处理换行符的问题。
在Python 3.X中,csv模块仍然会处理换行符,但它还需要知道如何处理Unicode字符串的编码。正确的打开csv文件以进行写入的方法是:
outputfile=open("out.csv",'w',encoding='utf8',newline='')
encoding
可以根据你的需要来设置,但newline=''
可以避免文本模式下的换行符处理。在Windows系统上,如果不这样做,文件的换行符会写成\r\r\n,而不是正确的\r\n。这一点在3.X的csv.reader文档中提到过,但csv.writer也需要这样做。
6
你可能需要以文本模式打开这个文件。如果不是的话,提供足够的代码,让别人能运行并看到问题所在。