Joo*_*zty 0 python io python-3.x
我正在尝试从像对象这样的字节中读取行。
这是一个非常简单的例子。我知道它可以以不同的方式完成,但保持这种流动很重要(BytesIO -> BufferedIOBase -> TextIOWrapper)。
import io
bytes_io = io.BytesIO(b"a\nb\nc")
buffered_io_base = io.BufferedIOBase(bytes_io)
text_io = io.TextIOWrapper(buffered_io_base)
for line in text_io:
print(line)
Run Code Online (Sandbox Code Playgroud)
这最终会出现错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
io.UnsupportedOperation: not readable
Run Code Online (Sandbox Code Playgroud)
Python 版本 3.6.5
io.BufferedIOBase 不应该被实例化,它甚至不应该有一个公共构造函数。您在这里当然不需要它,它是那里的一个基类,用于记录缓冲 I/O 对象必须实现的方法,以及继承类可以构建的默认实现。
支持某种缓冲的二进制流的基类。它继承了
IOBase. 没有公共构造函数。
您只需要使用BytesIO,它继承自BufferedIOBase,它本身已经实现了成为缓冲 I/O 对象所需的方法。从io.BytesIO文档中:
它继承了
BufferedIOBase. [...][...]
BytesIO除了来自BufferedIOBase和的方法之外,还提供或覆盖这些方法IOBase:[...]
将您的BytesIO对象直接包装在TextIOWrapper()此处的对象中:
>>> import io
>>> bytes_io = io.BytesIO(b"a\nb\nc")
>>> text_io = io.TextIOWrapper(bytes_io)
>>> for line in text_io:
... print(line, end='')
...
a
b
c
Run Code Online (Sandbox Code Playgroud)
当TextIOWrapper文档告诉你的第一个参数预期为一个BufferedIOBase二进制流,我们的目标是要告诉你,你需要的子类BufferedIOBase,一些农具该接口。BytesIO是这样的对象,所以是io.BufferedIOReader(),io.BufferedIOWriter(),io.BufferedRandom(),和io.BufferedRWPair()。
通常,您不会创建文档的类层次结构部分中列出的任何ABC 的实例。它们在那里提供文档,在您需要检查类型时进行测试,并成为派生自定义实现的坚实基础。
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |