如何在Python中concat文件,其中total size>available memory

2024-04-25 22:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Resumable.js编写一个Python后端,它允许从浏览器上传大文件,方法是在客户机上将它们分割成小块。你知道吗

一旦服务器将所有块保存到一个临时文件夹中,它就需要合并它们。单个块是非常小的(默认情况下为1MB)二进制文件,但是它们的总大小可能比web服务器的可用内存大。你知道吗

如何在Python中执行合并步骤?假设一个文件夹只包含n个文件,名称为“1”、“2”、“3”。。。你知道吗

你能解释一下:

  • read()
  • write(.., 'wb')
  • write(.., 'ab')
  • shutil.copyfileobj()
  • mmap

在这种情况下是否可行?根据这些内存需求,建议的解决方案是什么?你知道吗


Tags: 文件方法服务器文件夹名称web客户机js
2条回答

跳出框框思考。在Unix esqe环境中执行此操作的最简单方法如下:

cat file1 file2 file3 file4 > output

不需要直接读取文件。在窗户上应该是

C:\ copy file1 file2 file3 file4 output

要做到这一点,有一个great post关于如何在Linux中运行命令行程序。你知道吗

坚持一个纯粹的pythonic解决方案(我想你有理由不使用Linux中的“cat”或Windows中的“copy”):

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”)进行写入和读取,以避免未经请求的换行转换污染最终结果,否则会损坏最终二进制文件。你知道吗

如果您正在寻找最快的方法,那么您可能需要对照您表示感兴趣的其他方法进行基准测试,我看不到任何保证,即上述基准测试的获胜者不会多少依赖于操作系统。你知道吗

相关问题 更多 >