如果在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)
I get an error:
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写入器的情况下实现我正在尝试的内容?
seek(0)
,而不是fill_into_stringio
中的任何writerow
操作。 - Terry Jan Reedy