python3文件写入失败_在csv中写入io.BytesIO在python3中失败

我正在尝试编写python 2/3兼容代码来将字符串写入csv文件对象.这段代码:

line_as_list = [line.encode() for line in line_as_list]

writer_file = io.BytesIO()

writer = csv.writer(writer_file, dialect=dialect, delimiter=self.delimiter)

for line in line_as_list:

assert isinstance(line,bytes)

writer.writerow(line)

在Python3上给出了这个错误:

> writer.writerow(line)

E TypeError: a bytes-like object is required, not 'str'

但断言类型没有问题,为什么csv会产生错误?

我不能只为Python 2和3使用BytesIO吗?这里的问题在哪里?

解决方法:

在Python3中,csv.writer期望在文本模式下打开类似文件的对象.

在Python2中,csv.writer需要一个以二进制模式打开的类文件对象.

因此,在Python3中,使用io.StringIO,而在Python2中使用io.BytesIO:

import io

import csv

import sys

PY3 = sys.version_info[0] == 3

line_as_list = [u'foo', u'bar']

encoding = 'utf-8'

if PY3:

writer_file = io.StringIO()

else:

writer_file = io.BytesIO()

line_as_list = [line.encode(encoding) for line in line_as_list]

writer = csv.writer(writer_file, dialect='excel', delimiter=',')

writer.writerow(line_as_list)

content = writer_file.getvalue()

if PY3:

content = content.encode(encoding)

print(type(content))

print(repr(content))

在Python3中,上面的代码打印出来

b'foo,bar\r\n'

在Python2中,上面的代码打印出来

'foo,bar\r\n'

标签:python,python-3-x,string,csv,bytesio

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值