CV・NLPハマりどころメモ

画像認識と自然言語処理を研究する中でうまくいかなかったことと、その対策をまとめる自分用メモが中心。

shutil.copyfileでpermission deniedがでたときは引数を見直そう[Python][shutil]

Windowsでファイルをあるフォルダへコピーするコードを書いた際,以下のエラーがでた.

import shutil

path1 = r"C:\Users\hoge\Documents\hoge\hoge.pdf"
path2 = r"C:\Users\hoge\Documents\hoge2"

shutil.copyfile(path1, path2)
>>
PermissionError: [Errno 13] Permission denied: 'C:\Users\hoge\Documents\hoge2'

このエラーを見たとき,hoge2というフォルダにアクセス権限が無いのかと勘違いし,管理者権限でコマンドプロンプトを開いたり,フォルダの読み取り設定を見直したりした.

しかし,エラーの原因はフォルダにアクセス権限が無いことではないのだ.

実は,shutil.copyfileは引数として入力ファイル名・出力ファイル名を与えなければならない関数だったのだ.

shutil --- 高水準のファイル操作 — Python 3.7.3 ドキュメント

この為,エラーは引数として与えたものが出力フォルダ名だったことが原因だ.

そして,ファイルをあるフォルダへコピーする際にはshutil.copyを使うべきだったのだ.

import shutil

path1 = r"C:\Users\hoge\Documents\hoge\hoge.pdf"
path2 = r"C:\Users\hoge\Documents\hoge2"

shutil.copy(path1, path2)

なんという凡ミス.しかしながら,Permission deniedとエラーがでるのはちと混乱を招く気がする.