7.3.6フォルダー/ファイルをコピーする

構文copytree関数
copytree(src, dst, ignore=None, copy_function=copy2
src :コピー元のフォルダー
dst :コピー先のフォルダー
ignore :コピーをスキップするフォルダー/ファイル
copy_function :コピーに利用する関数(後述)
>>> import shutil >>> >>> shutil.copytree( ... 'C:\\data\\selfpy\\chap07/doc', 'C:\\data\\selfpy\\chap07/data', ... ignore=shutil.ignore_patterns('*.dat', '*.log') ... ) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\kiris\anaconda3\lib\shutil.py", line 559, in copytree return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, File "C:\Users\kiris\anaconda3\lib\shutil.py", line 457, in _copytree os.makedirs(dst, exist_ok=dirs_exist_ok) File "C:\Users\kiris\anaconda3\lib\os.py", line 225, in makedirs mkdir(name, mode) FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: 'C:\\data\\selfpy\\chap07/data' >>>

エラーメッセージによると、C:\\data\\selfpy\\chap07/data というパスに既に存在するファイルがあり、ディレクトリを作成することができませんでした。以下の箇条書きでエラーの原因と解決策を説明します:

  • shutil.copytree() 関数は、指定したソースディレクトリを指定したターゲットディレクトリに再帰的にコピーします。
  • 今回のエラーは、ターゲットディレクトリである C:\\data\\selfpy\\chap07/data が既に存在するファイルであるため、ディレクトリを作成することができなかったことを示しています。
  • copytree() 関数はディレクトリの作成を試みるため、既に存在するディレクトリやファイルがターゲットディレクトリにある場合にはエラーが発生します。
  • 解決策としては、コピー先のディレクトリを別の名前に変更するか、既存のディレクトリを削除してから再度実行する必要があります。
  • 例えば、C:\\data\\selfpy\\chap07/data を別の名前に変更するか、事前に該当するディレクトリを削除してから再度試してみてください。

修正後のコード例:

python
import shutil shutil.copytree( 'C:\\data\\selfpy\\chap07/doc', 'C:\\data\\selfpy\\chap07/data_new', ignore=shutil.ignore_patterns('*.dat', '*.log') )

上記のコードでは、C:\\data\\selfpy\\chap07/docC:\\data\\selfpy\\chap07/data_new にコピーするようにしています。



すでにファイルがあるらしくうまく行きません。

ここらへんを改善できたら7章がすごくスムーズにいくのはわかっているんですが、今後の課題ですね

どうにか同時進行で見つけていきたいです。