Python 大きなファイルをコピー処理(shutil.copy)が遅いという事象に関する情報になります。
情報元はこちら。
performance - Python copy larger file too slow - Stack Overflow
shutil.copyを使って、大きなファイル(1GB以上)をハードディスクからUSBドライブにコピーしようとしています。私がやろうとしていることを描いた簡単なスクリプトは以下の通りです。
import shutil
src_file = "source\to\large\file"
dest = "destination\directory"
shutil.copy(src_file, dest)
Linuxでは2~3分しかかかりません。しかし、Windowsでは、同じファイルのコピーに10-15分以上かかります。誰か理由を説明して、できればpythonのコードを使った解決策を教えてください。
アップデート1
ファイル名をtest.pyとして保存ソースファイルのサイズは1GBです。デスティネーションディレクトリはUSBドライブにあります。ptimeでファイルコピー時間を計算しました。結果は次のとおりです。
ptime.exe test.py
ptime 1.0 for Win32, Freeware - http://www.
Copyright(C) 2002, Jem Berkes <jberkes@pc-t=== test.py ===
Execution time: 542.479 s
542.479秒 == 9分。1GBのファイルをコピーするのに、shutil.copyが9分もかかるとは思えませんが。
アップデート2
同じスクリプトがLinuxでも動作するので、USBの健康状態は良好です。Windowsネイティブのxcopyで同じファイルをコピーして時間を計算した結果は以下の通りです。
ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>=== xcopy F:\test.iso L:\usb\test.iso
1 File(s) copiedExecution time: 128.144 s
128.144秒 == 2.13分。テストファイルをコピーしても、1.7GBの空き容量があります。
続いて、回答内容の抜粋です。
あなたの問題はPythonとは何の関係もありません。実際、WindowsのコピープロセスはLinuxシステムに比べて本当に貧弱です。
https://superuser.com/questions/302753/is-ubuntu-linux-file-copying-algorithm-better-than-windows-7
こちらの投稿によれば、xcopyやrobocopyを使うことで改善できます。(Ubuntu) LinuxのファイルコピーアルゴリズムはWindows 7よりも優れている?しかし、この場合、LinuxとWindowsで別々の呼び出しをしなければなりません...。
import os
import shutil
import syssource = "source\to\large\file"
target = "destination\directory"if sys.platform == 'win32':
os.system('xcopy "%s" "%s"' % (source, target))
else:
shutil.copy(source, target)
実際にコピーのパフォーマンスがでない場合は、robocopyで改善することがあります。