データのバックアップをとるため、ファイルを別の場所にコピーしたい…。
Pythonでファイルをコピーする方法は無いの?
あります!
できるだけ簡単にできる方法をわかりやすく解説いたします!
「複数のファイルをコピーする方法」や
「フォルダの中身全てをコピーする方法」
も紹介いたします!
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
Pythonでファイルをコピーするには
「shutill」の「copy」を使います。まずは実行見本をどうぞ。
実行見本
全コード
import shutil
shutil.copy('C:/Utatane/input.xlsx', 'C:/Utatane/0413backup')
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
現在、Cドライブの中に「Utatane」というフォルダがあります。
その中にある「input.xlsx」というエクセルファイルを、「0413backup」というフォルダにコピーしてみます。
インポート
import shutil
ファイルやフォルダを移動させるには、「shutil」のインポートが必要です。
まずは上記一文を記述して、「shutil」をインポートしましょう。
ファイルのコピー
shutil.copy('C:/Utatane/input.xlsx', 'C:/Utatane/0413backup')
上記の一文で、ファイルをコピーすることができます。
【 shutil.copy(‘現在のフォルダパス/ファイル名‘, ’コピー先のフォルダパス’) 】
コピー先のフォルダに同じ名前のファイルが既に存在していた場合、上書き保存されてしまいます。
コピー先に元々あったファイルは実質消えてしまいますので、ご注意ください。
また、フォルダパスやファイル名が間違っていた場合、コピーが正常に行われません。
エラーが出て教えてくれる場合があるものの、出ないこともあります。
フォルダパスやファイル名は間違わないようにしましょう。
「copy」を使った場合、コピー先ファイルの更新日時などは書き換えられてしまいます。
【コピー元ファイル】更新日時:2024/04/13 10:10
【コピー先ファイル】更新日時:2024/04/16 19:32
更新日時などを書き換えたくない場合は、「copy」ではなく「copy2」を使いましょう。
使い方・書き方は「copy」と同じです。
日付入りフォルダもPythonで自動作成できます。下記記事をご参考ください。
複数のファイルをコピーする
「Utatane」フォルダにある他のファイルもコピーしてみましょう。
import shutil
import glob
files = glob.glob('C:/Utatane/*.*')
for file in files :
shutil.copy(file, 'C:/Utatane/0413backup')
実行してみます。
他のファイルも「0413backup」フォルダ内にコピーできました。
複数のファイルをコピーするには「glob」を使います。
2行目でglobをインポートし、
4行目でファイル一覧を取得しています。
「*.*」のところを「*.xlsx」に変えるとエクセルファイルだけをコピーできます。
globについては下記記事をご参考ください。
取得したファイルパス一覧を、6行目のfor文を使って1つ1つコピーしています。
for文については、下記記事をご参考ください。
フォルダの中身全てをコピーする
今度は、フォルダの中身全てをコピーしてみましょう。
import shutil
shutil.copytree('C:/Utatane/test', 'C:/Utatane/0413backup', dirs_exist_ok = True)
フォルダの中身全てをコピーするには、「copytree」を使います。
書き方は「copy」と同じですが、「dirs_exist_ok = True」というのが追加されています。
「dirs_exist_ok = True」は、「上書きを許可する」というものです。
これを書かなかった場合、【「0413backup」が既に存在しています】
というようなエラーが出てコピーできません(上書きができないため)
では、実行してみましょう。
「test」フォルダの中身全てを「0413backup」フォルダ内にコピーできました。
「copytree」を使えば、「test2」のようなフォルダもコピーすることができ、
さらに「test2」フォルダ内のファイルやフォルダもコピーすることができます。
うまく動作しない時
エラーが出る
No such file or directory: ‘xxx’
「FileNotFoundError: [Errno 2] No such file or directory: ‘xxx’」は「指定したファイルやフォルダがありません」というエラーです。
「copy」で指定した「現在のフォルダパスやファイル名」が間違っている可能性があります。
実際のパスと、指定のパスを見比べてみましょう。
指定されたパスが見つかりません
「FileNotFoundError: [WinError 3] 指定されたパスが見つかりません。: ‘xxx’」もフォルダパスやファイル名が間違っている場合に起こるエラーです。
実際のパスと、指定のパスを見比べてみましょう。
既に存在するファイルを作成することはできません
「FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: ‘xxx’」は、「copytree」を使用した時に出るエラーです。
見本のように、「dirs_exist_ok = True」を追記することで解決します。
最後に
Pythonでファイルをコピーする方法を解説いたしました。
冒頭の悩みのように、データのバックアップをする場合に便利ですので。ぜひご活用ください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!