读入二进制文件

时间:2015-09-02 08:54:44

标签: python

我想知道是否有一种方法可以读取二进制文件中的字节序列。 我需要在文件的不同位置读取大量值。

这是我正在做的一个例子:

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)

3 个答案:

答案 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)