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

4 投票
3 回答
8132 浏览
提问于 2025-04-16 10:15

我有一个简单的脚本,在我的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

你可能需要以文本模式打开这个文件。如果不是的话,提供足够的代码,让别人能运行并看到问题所在。

撰写回答