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.8.0 ドキュメント
この為,エラーは引数として与えたものが出力フォルダ名だったことが原因だ.
そして,ファイルをあるフォルダへコピーする際には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がでるのはちと混乱を招く気がする.
この他にもPythonicなコーディング手法を身に着けたいときには以下の書籍がおすすめです。
ディスカッション
コメント一覧
まだ、コメントがありません