将文件区域的数量复制到另一个文件?

时间:2013-08-31 18:39:50

标签: python linux file io seek

我有一个可能很大的(二进制)文件,它由许多小记录组成。每条记录都有一个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)

有更好,更有效的方法吗?操作系统可以在这里提供更多帮助吗?

0 个答案:

没有答案