我有一个可能很大的(二进制)文件,它由许多小记录组成。每条记录都有一个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)
有更好,更有效的方法吗?操作系统可以在这里提供更多帮助吗?