我试图了解 io.BytesIO write() read()方法。
我的理解是,我可以使用 io.BytesIO ,就像使用文件一样
目的。

import io
in_memory = io.BytesIO(b'hello')
print( in_memory.read() )

上面的代码将按预期返回b'hello',但是下面的代码将返回空字符串b''。
import io
in_memory = io.BytesIO(b'hello')
in_memory.write(b' world')
print( in_memory.read() )

我的问题是:

-io.BytesIO.write(b' world')到底在做什么?

- io.BytesIO.read() io.BytesIO.getvalue()有什么区别?

我假设答案与 io.BytesIO 有关,它是一个流对象,但是我不清楚。

最佳答案

问题是您位于流的末尾。将该位置想像为光标。编写b' world'后,光标将在流的末尾。当您尝试.read()时,您正在读取游标位置之后的所有内容-没什么,所以您得到了空的字节串。

要在流中导航,可以使用.seek方法:

>>> import io
>>> in_memory = io.BytesIO(b'hello', )
>>> in_memory.write(b' world')
>>> in_memory.seek(0)  # go to the start of the stream
>>> print(in_memory.read())
b' world'

请注意,就像write('w')模式下的文件流一样,初始字节b'hello'已被您的b' world'写入覆盖。
.getvalue()仅返回流的全部内容,而与当前位置无关。

关于python - Python io.BytesIO的write(),read()和getvalue()方法如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53485708/

10-12 23:20