Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何以二进制模式写入csv文件?_Python_Csv_Binary - Fatal编程技术网

Python 如何以二进制模式写入csv文件?

Python 如何以二进制模式写入csv文件?,python,csv,binary,Python,Csv,Binary,python的csv编写器不再支持二进制模式了吗 到目前为止,我还没有在“b”模式下写作,我遇到了非常恼人的错误,比如: --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-030fb0c9dc9a>

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'
如果有人能解释这个错误那就太好了。我传入了一个iterable,其中每个元素都是一个字节序列,但我仍然得到一个错误,输入不是“bytes”,而是“str”。这种行为似乎出乎意料

我知道如果我关闭二进制模式,上面的代码片段可以写入普通文件。如果任何人有建设性的解决方案或建议,我将非常感谢

为了尽可能方便地与实现DB API的模块进行接口,值None被写为空字符串。[…]所有其他非字符串数据在写入之前都使用str进行字符串化

这意味着您必须向它传递一个接受字符串的文件对象,这通常意味着以文本模式打开它

如果您遇到需要字节的文件对象,请将其包装为一个以处理str->bytes编码:

# assuming you want utf-8
with io.TextIOWrapper(binary_file, encoding='utf-8', newline='') as text_file:
    w = csv.writer(text_file)
:

为了尽可能方便地与实现DB API的模块进行接口,值None被写为空字符串。[…]所有其他非字符串数据在写入之前都使用str进行字符串化

这意味着您必须向它传递一个接受字符串的文件对象,这通常意味着以文本模式打开它

如果您遇到需要字节的文件对象,请将其包装为一个以处理str->bytes编码:

# assuming you want utf-8
with io.TextIOWrapper(binary_file, encoding='utf-8', newline='') as text_file:
    w = csv.writer(text_file)

python的csv编写器不再支持二进制模式了吗?对的Python3中的csv模块需要以文本模式打开输入和输出文件。请用实际文本替换这些图像好吗?请参阅@PM2Ring,谢谢您的评论。我很清楚将其添加为文本块的好处。只要我有5分钟的空闲时间,我就会马上修复。你能澄清一下为什么你必须有一个二进制文件吗?您正在写入与7位ASCII或UTF-8不兼容的数据吗?如果是这样,您可能需要使用另一种编码,例如拉丁文1。@PM2Ring它是一个只支持二进制写入模式的api接口。这不是我能控制的。坚持使用这个界面。下面由user2357112给出的答案效果很好,尤其是write_through=True标志,因此它只将所有内容发送到底层二进制文件句柄的缓冲区,并进行文本->二进制转换。python的csv编写器是否不再支持二进制模式?对的Python3中的csv模块需要以文本模式打开输入和输出文件。请用实际文本替换这些图像好吗?请参阅@PM2Ring,谢谢您的评论。我很清楚将其添加为文本块的好处。只要我有5分钟的空闲时间,我就会马上修复。你能澄清一下为什么你必须有一个二进制文件吗?您正在写入与7位ASCII或UTF-8不兼容的数据吗?如果是这样,您可能需要使用另一种编码,例如拉丁文1。@PM2Ring它是一个只支持二进制写入模式的api接口。这不是我能控制的。坚持使用这个界面。下面由user2357112给出的答案运行良好,特别是使用write_through=True标志,因此它只将所有内容发送到底层二进制文件句柄的缓冲区,并且只执行文本->二进制转换。二进制模式不采用换行符argument@ChristopherPisz:是的,但我正在将换行符参数传递给io.TextIOWrapper,不适用于以二进制模式打开原始文件的调用。io.TextIOWrapper不接受换行符参数。二进制模式不接受换行符argument@ChristopherPisz:是的,但我正在将换行符参数传递给io.TextIOWrapper,而不是以二进制模式打开原始文件的调用。io.TextIOWrapper不接受换行符参数。