【发布时间】:2021-03-24 12:00:11
【问题描述】:
我有一个 python3 脚本,它将数据读入缓冲区
fp = open("filename", 'rb')
data = fp.read(count)
我不完全理解(即使在阅读了文档之后)read() 返回的内容。它似乎是某种可迭代的二进制数据。但它不是一个列表。
令人困惑的是,在脚本的其他地方,列表用于二进制数据。
frames = []
# then later... inside a loop
for ...
data = b''.join(frames)
无论如何...我想以字为单位(又名 2 字节块)迭代 read() 返回的对象
目前脚本包含这个 for 循环
for c in data:
# do something
是否可以更改 c 以使此循环遍历单词(2 字节块)而不是单个字节?
编辑:
我不能在循环中使用 read() 一次读取 2 个字节。
【问题讨论】:
-
“我不完全理解(即使在阅读文档之后)read() 返回的内容。它似乎是某种可迭代的二进制数据。但它不是一个列表。” this 是您找到的文档吗?上面写着
Files opened in binary mode (including 'b' in the mode argument) return contents as bytes objects without any decoding,bytes这个词链接到该类型的文档。 -
“令人困惑的是,在脚本的其他地方,列表用于二进制数据。”使用了 一个 列表,其中可能包含使用
b''的join方法连接的bytes对象(另一个bytes对象)。 -
您希望
c是什么类型的对象?在其当前形式中,c将是int。然而,在“2 字节块”中,它将是一个bytes对象。 -
@KarlKnechtel 这似乎是
open()的文档?不是read()。 -
是的,这是
open()的文档。open()是您创建文件对象的方式,那里的文档解释了您可以使用这些对象做什么。.read()是文件对象的一种方法,因此您可以从那里获得相应的文档。