我有一个可能很大的(二进制)文件,其中包含许多小记录。每条记录都有一个 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)
有没有更好、更有效的方法来做到这一点?操作系统可以在这里提供更多帮助吗?