【发布时间】:2018-07-04 04:52:45
【问题描述】:
如果我在 python 3 中运行以下代码
from io import BytesIO
import csv
from io import TextIOWrapper
def fill_into_stringio(input_io):
writer = csv.DictWriter(TextIOWrapper(input_io, encoding='utf-8'),fieldnames=['ids'])
for i in range(100):
writer.writerow({'ids': str(i)})
with BytesIO() as input_i:
fill_into_stringio(input_i)
input_i.seek(0)
我收到一个错误:
ValueError: I/O operation on closed file.
如果我不使用 TextIOWrapper,则 io 流将保持打开状态。例如,如果我将函数修改为
def fill_into_stringio(input_io):
for i in range(100):
input_io.write(b'erwfewfwef')
我不再收到任何错误,因此出于某种原因,TestIOWrapper 正在关闭我以后想从中读取的流。这是打算这样吗?是否有办法在不自己编写 csv 编写器的情况下实现我正在尝试的目标?
【问题讨论】:
-
省略的回溯表明被拒绝的 I/O 操作是最终的
seek(0),而不是fill_into_stringio中的任何writerow操作。
标签: python python-3.x csv bytesio