python的csv编写器不再支持二进制模式吗?
直到现在我还没有写'b'模式,我得到了非常烦人的错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-030fb0c9dc9a> in <module>()
4 with open('test.csv', 'wb') as f:
5 w = csv.writer(f)
----> 6 w.writerows(rows)
TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)
码:
import csv
rows = [b'1,2,3', b'4,5,6', b'7,8,9']
with open('test.csv', 'wb') as f:
w = csv.writer(f)
w.writerows(rows)
Run Code Online (Sandbox Code Playgroud)
如果有人能够解释那个很棒的错误.我传入一个iterable,其中每个元素都是一个字节序列,但我仍然得到一个关于输入不是'bytes'而是'str'的错误.这种行为似乎出人意料
我知道如果我关闭二进制模式,上面的代码片段可以写入普通文件.如果任何人有一个建设性的解决方案或建议,我将非常感激.
use*_*ica 10
csvPython 3中的模块总是尝试编写字符串,而不是字节:
为了使与实现DB API的模块接口尽可能简单,将值None写为空字符串.[...]所有其他非字符串数据在写入之前用str()进行字符串化.
这意味着你必须传递一个接受字符串的文件对象,这通常意味着在文本模式下打开它.
如果您遇到需要字节的文件对象,请将其包装在一个io.TextIOWrapper处理str-> bytes编码中:
# assuming you want utf-8
with io.TextIOWrapper(binary_file, encoding='utf-8', newline='') as text_file:
w = csv.writer(text_file)
Run Code Online (Sandbox Code Playgroud)