【问题标题】:Python: slicing a very large binary filePython:切片一个非常大的二进制文件
【发布时间】:2011-01-22 17:42:51
【问题描述】:

假设我有一个 12GB 的二进制文件,我想从中切出 8GB。我知道我想要在其间切换的位置索引。

我该怎么做?显然 12GB 不适合内存,这很好,但 8GB 也不会……我认为这很好,但如果你分块执行,二进制似乎不喜欢它!我一次将 10MB 附加到一个新的二进制文件中,而新文件中每个 10MB 块的边缘都有不连续性。

有没有 Pythonic 的方法可以轻松做到这一点?

【问题讨论】:

    标签: python binary large-files


    【解决方案1】:

    这是一个简单的例子。根据需要进行调整:

    def copypart(src,dest,start,length,bufsize=1024*1024):
        with open(src,'rb') as f1:
            f1.seek(start)
            with open(dest,'wb') as f2:
                while length:
                    chunk = min(bufsize,length)
                    data = f1.read(chunk)
                    f2.write(data)
                    length -= chunk
    
    if __name__ == '__main__':
        GIG = 2**30
        copypart('test.bin','test2.bin',1*GIG,8*GIG)
    

    【讨论】:

    • 我做了一些与此非常相似的事情,但它似乎不喜欢它,如果你从中间提取一个数据块,二进制文件有时会在边缘混乱,因为它需要它周围的字节才有意义吗?唔。我会试试你的代码虽然欢呼。另外,您是否在代码的最后一行中以错误的方式获取了长度和缓冲?
    • 即开始和长度...最后一行使用默认的bufsize。我不确定您所说的“边缘混乱”是什么意思。如果你需要周围的字节,也许你的开始和长度不正确?
    • 你是对的!我自己搞砸了,现在一切正常:) 那么文件传输的最佳缓冲区大小是多少? 1MB 好吗?
    • 不同的尺寸可能更快或更慢......唯一知道的方法是确定是配置文件。不要忘记接受答案:^)
    • 抱歉有段时间没有签到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2011-03-04
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多