繁体   English   中英

使用csv.writer直接写入二进制模式

[英]Writing directly into binary mode with csv.writer

我目前使用以下代码创建一个二进制文件,然后将其直接上传到AWS S3现在我被告知可以使用csv.writer 直接写入二进制模式,并避免使用io.StringIO()进行额外的操作。 但是,我仍然很难弄清楚它是如何工作的。 你能帮我吗?

buffer = io.StringIO()
writer = csv.writer(buffer)
writer.writerow(["a", "b", "c"])
buffer_2 = io.BytesIO(buffer.getvalue().encode())

BUCKET_NAME = 'fbprophet'
OBJECT_NAME = 'blah.csv'

s3.upload_fileobj(buffer_2, BUCKET_NAME, OBJECT_NAME)

在我看来,您那里所拥有的东西是合理的。 您链接到的帖子谈论的是写入文件 ,而不是内存中的流。 可以以文本或二进制模式打开文件,该文件确定是对字符串( str )还是对原始字节( bytes )进行操作。 但是io包中的类似内存文件的对象并不那么灵活:您有StringIO用于字符串,而BytesIO用于字节。

由于csv需要文本流(字符串),而boto需要二进制流(字节),因此必须执行转换步骤。

我建议尽管将实际编码传递给encode()函数,以避免退回到Python依赖系统的默认值:

buffer_2 = io.BytesIO(buff.getvalue().encode('utf-8'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM