我想知道是否有一种方法可以读取二进制文件中的字节序列。 我需要在文件的不同位置读取大量值。
这是我正在做的一个例子:
filein = open(name, 'rb')
liste_octet = [0, 8, 16, 20]
val = ''
for pos_octet in liste_octet:
filein.seek(pos_octet, 1)
val += filein.read(4)
是否可以做类似的事情?
filein = open(name, 'rb')
liste_octet = [0, 8, 16, 20]
filein.read(octet)
答案 0 :(得分:-1)
这似乎是struct的工作。假设你正在阅读字符:
with open(filename) as fin:
for offest in offsets:
fin.seek(offest)
val += struct.unpack('s',fin.read(4))
答案 1 :(得分:-1)
据我所知,没有直接的方法filein.read(octet)
。但是,稍微重新排序现有代码可以轻松生成一个小辅助函数:
def read_at_positions(filename, positions, length):
data = []
with open(filename, 'rb') as fh:
for pos in positions:
fh.seek(pos)
data.append(fh.read(length))
return data
现在您可以改为使用read_at_positions(name, [0, 8, 16, 20], 4)
。
我已使用with
-statement处理打开的文件对象,您可能希望在this excellent article中阅读有关它的内容。
答案 2 :(得分:-1)
查看mmap模块。它允许您以字节串的形式访问文件,但不将整个文件加载到内存中:
import mmap
offsets = [0, 12, 32, 56]
with open(..., 'rb') as fp:
mm = mmap.mmap(fp.fileno(), 0)
# Load the octects in a list.
octects = [mm[i:i+4] for i in offsets]
# Or concatenate them into a byte string.
val = b''.join(mm[i:i+4] for i in offsets)