相关疑难解决方法(0)

为什么 TextIOWrapper 关闭给定的 BytesIO 流?

如果我在 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)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

ValueError: I/O operation on closed file.
Run Code Online (Sandbox Code Playgroud)

如果我不使用 TextIOWrapper,io 流将保持打开状态。例如,如果我将函数修改为

def fill_into_stringio(input_io):
    for i in range(100):
        input_io.write(b'erwfewfwef')
Run Code Online (Sandbox Code Playgroud)

我不再收到任何错误,因此出于某种原因,TestIOWrapper 正在关闭我想稍后阅读的流。这是打算像这样吗,是否有一种方法可以在不自己编写 csv 编写器的情况下实现我的尝试?

python csv bytesio python-3.x

4
推荐指数
1
解决办法
2449
查看次数

标签 统计

bytesio ×1

csv ×1

python ×1

python-3.x ×1