2017-01-12 13 views
0

我正在編寫一個Resumable.js的Python後端,它允許從瀏覽器上傳大文件,方法是在客戶端將其分割爲更小的塊。如何在Python中連接文件,其總大小>可用內存

服務器完成將所有塊保存到臨時文件夾後,需要將它們合併。單個塊非常小(默認情況下爲1 MB)二進制文件,但它們的總大小可能會大於Web服務器的可用內存。

你會如何做Python的組合步驟?假設一個文件夾中只包含n個文件,其名稱爲 「1」, 「2」, 「3」 ......

你能解釋一下:

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

會在這種情況下工作,根據這些內存要求,推薦的解決方案是什麼?

回答

2

堅持純粹的Python的解決方案(我假設你有你的理由與在Windows中的Linux「貓」或「複製」不會):

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')寫入和讀取,以避免由於未經請求的換行轉換而導致最終結果受到污染,從而破壞最終的二進制文件。

如果您正在尋找最快方法,那麼你可能需要基準對你表示有興趣的其他方法,我沒有看到的得主說基準不會是有些依賴於操作系統的任何擔保。

0

在箱子外面思考。在Unix-esqe環境下執行此操作的最簡單方法如下所示:

cat file1 file2 file3 file4 > output 

不需要直接讀取文件。在Windows這將是

C:\ copy file1 file2 file3 file4 output 

要做到這一點有關於如何在Linux上運行命令行程序的great post

相關問題