Python 3.6中通过CSV读取器传递文件对象

3

示例文件对象数据包含以下内容:

b'QmFyY29kZSxRdHkKQTIzMjMsMTAKQTIzMjQsMTUKNjUxMDA1OTUzMjkyNSwxMgpBMjMyNCwxCkEyMzI0LDEKQTIzMjMsMTAK'

Python文件中包含以下代码

string_data = BytesIO(base64.decodestring(csv_rec))
read_file = csv.reader(string_data, quotechar='"', delimiter=',')
next(read_file)

当我在Python中运行上述代码时,我遇到了以下异常:
_csv.Error:迭代器应返回字符串,而不是int(您是否以文本模式打开文件?)
如何以文本模式打开字节数据?

3
如果迭代器应该返回字符串,为什么不使用 io.StringIO?像这样:string_data = StringIO(base64.decodestring(csv_rec).decode()) - 9dogs
1
确实,@9dogs。你应该写一个答案。 - cs95
@9dogs 你拯救了我的一天,非常感谢你。 - Rohan Nayani
1个回答

5
你已经接近成功了。事实上,csv.reader期望的是返回字符串的迭代器(不是字节)。io.StringIO提供了这样的迭代器,它与BytesIO是类似的。
from io import StringIO
csv_rec = b'QmFyY29kZSxRdHkKQTIzMjMsMTAKQTIzMjQsMTUKNjUxMDA1OTUzMjkyNSwxMgpBMjMyNCwxCkEyMzI0LDEKQTIzMjMsMTAK'

bytes_data = base64.decodestring(csv_rec)
# decode() method is used to decode bytes to string
string_data = StringIO(bytes_data.decode())
read_file = csv.reader(string_data, quotechar='"', delimiter=',')
next(read_file)

StringIO真是个救命稻草。我在flask-wtf的FileField文档中找不到任何相关的内容。 - AlxVallejo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接