如何在Python中连接文件,其中总大小>有效内存

时间:2017-01-12 02:56:42

标签: python resumablejs

我正在为Resumable.js编写一个Python后端,它允许从浏览器上传大文件,将它们拆分为客户端上的较小块。

服务器将所有块保存到临时文件夹后,需要将它们组合在一起。单个块非常小(默认为1 MB)二进制文件,但它们的总大小可能大于Web服务器的可用内存。

你将如何在Python中进行组合步骤?假设一个文件夹只包含n个文件,名称为“1”,“2”,“3”......

你能解释一下:

  • read()
  • write(.., 'wb')
  • write(.., 'ab')
  • shutil.copyfileobj()
  • mmap
在这种情况下,

会起作用,根据这些内存要求,推荐的解决方案是什么?

2 个答案:

答案 0 :(得分:2)

坚持纯粹的pythonic解决方案(我假设您有理由不在Linux中使用“猫”或“在Windows中复制”):

with open('out_bin','wb') as wfd:
    for f in filepaths:
        with open(f,'rb') as fd:
            # 1MB per writing chunk.
            shutil.copyfileobj(fd, wfd, 1024 * 1024 * 1)

将可靠而有效地完成工作。

关键点是以二进制模式书写和阅读(' wb'' rb')以避免因未经请求的换行转换而导致的最终结果受到污染,否则会发生损坏最后的二进制文件。

如果您正在寻找最快方法,那么您可能需要针对您表示感兴趣的其他方法进行基准测试,并且我不会看到所述基准测试的获胜者的任何保证不会在某种程度上取决于操作系统。

答案 1 :(得分:0)

在盒子外面思考。在Unix-esqe环境中执行此操作的最简单方法是:

cat file1 file2 file3 file4 > output

无需直接读取文件。在Windows上它将是

C:\ copy file1 file2 file3 file4 output

要做到这一点,有关于如何在Linux中运行命令行程序的great post