1

我有一个可能很大的(二进制)文件,其中包含许多小记录。每条记录都有一个 ID,从某个偏移量开始,并且有一个长度

现在,我只对大文件中包含的记录的一个子集感兴趣,我想创建一个新文件,它只包含我感兴趣的记录。

我有一个(offset, length)元组列表,它指定了我感兴趣的记录的位置。

我可以想到一种天真的方法来做到这一点,例如:

def copyfragments(src, dst, seekmap):
    for offset, length in sorted(seekmap):
        src.seek(offset)
        dst.write(src.read(length))


bigfile = open('/tmp/large_file.dat', 'rb')
filtered = open('/tmp/filtered.dat', 'wb')

# contains (offset, length) tuples
seekmap = (
    (0, 1021),
    (23020, 1040),
    (35001, 1231),
    ...
)

copyfragments(bigfile, filtered, seekmap)

有没有更好、更有效的方法来做到这一点?操作系统可以在这里提供更多帮助吗?

4

0 回答 0