openpyxlで作ったプログラムを動かしたら、
「PermisshionError: Permission denied: xxx」
というエラーが出た…。
いったいどうしたらいいの?
なるほど。
では「PermisshionError: Permission denied: xxx」
が出る原因と対処法を解説いたしましょう!
「PermisshionError: Permission denied: xxx」が出る原因と対処法を
Python歴3年の私が、できるだけわかりやすく解説し、解決に導きます。
「PermisshionError: Permission denied: xxx」とはどんなエラー?
まず「PermisshionError: Permission denied: xxx」というエラーは、どんな時に出るエラーなのかを見ていきましょう。
このエラーは「xxxが開かれたままだから、編集できないよ!」と言ってきています。
「Permission denied」を直訳すると、「許可が拒否されました」となります。
これだけではわかりませんよね。
「Permission」は「許可・承認・同意」などを意味します。
「denied」は「deny」の過去形で、「拒否・否認・拒む」などの意味が含まれます。
これでもまだわからないと思います。
要は「xxxを編集するためにアクセスしようとしたが、承認されず拒否された」と言ってきています。
ではxxxにアクセスできない原因はどこにあるのでしょうか。
「PermisshionError: Permission denied: xxx」が出る原因
前項でほとんど解説してしまいましたが、このエラーが出る原因はつまり
xxxを開いたままにしているから
です。
開いたままにしていると聞いて、こんな経験はありませんか?
会社の共有フォルダに入っているファイルを開こうとしたら、
誰かが既に開いていて編集できなかった…。
この場合、フロア中に響き渡る声で、「誰!?xxx開いてるの!?早く閉じて!」
と言いたくなりますよね。
このような経験が無い方向けに、別の場面で例えると、
朝、トイレに入ろうとしたら、
母「今、お父さん入っているよ」
あなた「えー!急いでるのに入れないじゃん!早く出て!」
という感じでしょうか…。
今回のエラーはコレと同じことが起きています。
プログラム側は、「おい!xxxが開いたままだから、編集できないじゃん!閉じてよ!」
と言ってきている訳です。
しかしながら、ファイルを開いていないのに「PermisshionError」が出る場合が稀にあります。
そんな時は、そのファイルが読み取り専用になっている場合がありますので、確認してみましょう。
「PermisshionError: Permission denied: xxx」の対処法
前項で、xxxを開いたままにしているから、アクセスできないのが原因とお伝えしました。
では対処法を2つ紹介いたします。
- xxxを閉じる
- コンピュータを再起動する
- ファイルの読み取り専用を解除する
xxxを閉じる
基本的にはxxxを閉じることで解決します。
しかしながら、開いていないのにこのエラーが出る場合があります。
その対処法が次です。
コンピュータを再起動する
開いていないのにもかかわらずこのエラーが出る場合は、ひとまずコンピュータを再起動してみてください。
前項で例に挙げた「共有フォルダのファイル」を開こうとした時も、他の誰も開いていないのに編集できない時がありますよね。
何らかの不具合で、コンピュータが「ファイルを開いている」と勘違いしているのです。
ちょっとめんどうですが、コンピュータを再起動して再度トライしてみましょう。
ファイルの読み取り専用を解除する
読み取り専用になっているファイルを編集した場合も、「PermisshionError」が発生します。
読み取り専用になっている場合は解除しましょう。
自動で解除する方法は、下記記事で解説しております。
早めにエラーを出すコツ
【プログラムを実行してから数時間後に「PermisshionError」が出て泣きたくなった】
という経験はありませんか?
これは「PermisshionError」が出るタイミングが関係しています。
ファイルを開こうとしたときにエラーが出ると思いがちですが、
実際は「ファイルを上書き保存しようとしたとき」にエラーが出ます。
プログラムを処理して、最後に上書き保存しようとしてエラーが出るのです。
なので時間のかかるプログラムでは、その分エラーが出るのが遅い傾向にあります。
そこで、エラーを早めに出すコツがあります。
プログラムを実行する前に、ひとまず上書き保存してしまいましょう!
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
wb.save('input.xlsx')
#実際に処理したいプログラム
wb.save('input.xlsx')
5行目でひとまず上書き保存することによって、ファイルが開いたままだと、この時点でエラーが出ます。
時間にするとほんの一瞬です。
実際にエラーが出る可能性があるため対処法とはいえませんが、時間短縮にはつながるかと思います。
最後に
「PermisshionError: Permission denied: xxx」の原因と対処法を解説いたしました。
このエラーが出たら、「対象ファイルを閉じる」と覚えてください。
このブログでは、Pythonに関する情報を配信しています。
この記事がわかりやすいと感じた方は、ぜひ他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!