IOError: [Errno 13] Python で許可が拒否されました

Zeeshan Afridi 2023年6月21日
  1. Python でのファイル処理のIOError: [Errno 13] Permission deniedとは
  2. Python で IOError: [Errno 13] Permission denied を修正する方法
  3. chmod コマンドを使用して Python でファイルのアクセス許可を変更する方法
IOError: [Errno 13] Python で許可が拒否されました

私たち人間は主にコンピュータの GUI と対話するため、IOError が発生するのはよくあることです。 フォルダー、ファイル、圧縮ファイル、またはアプリケーションの違いをビジュアルから理解しています。

私たちはフォルダー、ファイル、圧縮ファイル、またはアプリケーションと頻繁にやり取りしてきたため、脳がこれらを区別する処理を行っていないことがあります。

しかしその一方で、ビジュアルだけを理解していないコンピューターにすべてを供給しなければなりません。 むしろ、完全な詳細を提供する必要があります。

Python でのファイル処理のIOError: [Errno 13] Permission deniedとは

ファイル処理では、アクセスするファイルの完全なパスを提供する必要があります。 そうしないと、IOError が発生します。 ファイルを開きたいが、代わりにフォルダーのパスを提供した場合、IOError: [Errno 13] Permission deniedというメッセージが表示されます。

以下は、Python でのエラーのコード例です。

# opening file
f = open("E:\Projects\Test_folder", "r")

出力:

PermissionError: [Errno 13] Permission denied: 'E:\\Projects\\Test_folder'

上記の例では、Test_folder を読み取りモードで開こうとしていますが、これにより PermissionError: [Errno 13] Permission denied がスローされました。

Python で IOError: [Errno 13] Permission denied を修正する方法

これを修正するには、フォルダーではなく、アクセスするファイルへの正しいパスを入力する必要があります。 Test_folder に 2つのファイルがあるとします。

import os

# Folder Path
folder_path = "E:\Client Project Report\Test_folder"

# display all files in a folder
print(f"All files in the Test_folder are\n{os.listdir(folder_path)}")

# file path
file_path = "E:\Client Project Report\Test_folder\Test_file_1.txt"

# read file
f = open(file_path, "r")
print(f"\n{f.read()}")

# file closed
f.close()

出力:

All files in the Test_folder are
['Test_file_1.txt', 'Test_file_2.txt']

Hi There!
This is test file 1

ファイルのパスを指定すると、エラーが解決されます。 また、Python で開いているファイルを閉じることをお勧めします。これにより、そのファイルが再度開かれるまで、誰もそのファイルを読み書きできなくなります。閉じたファイルを読み書きしようとすると、 値エラー.

ただし、ファイルの参照オブジェクトが別のファイルに割り当てられると、Python はファイルを自動的に閉じます。 それでも、close() 関数を使用してファイルを閉じることをお勧めします。

さらに、try-catch ブロックのような例外処理メカニズムを使用して、そのようなエラーをキャッチし、プログラムがクラッシュしないようにすることもできます。

chmod コマンドを使用して Python でファイルのアクセス許可を変更する方法

説明したように、許可されていないファイルを開こうとすると、IOError: [Errno 13] Permission denied が発生します。

アクセスが許可されていないフォルダーを開きたいとしますが、そのフォルダーを開くスクリプトを Python で記述しようとすると、フォルダーへのアクセス許可が拒否され、Python コンパイラーがエラーをスローします。 .

このエラーを解決するには、モードの変更 を表す chmod コマンドを使用できます。 chmod() には、アクセスするファイル/フォルダーのパスとファイル モードの 2つの引数が必要です。

chmod コマンドは、ファイルのファイル許可を変更するために使用され、特定のファイルの許可フラグを変更することによって行われます。

パーミッション フラグは、ファイル所有者、ファイル グループ、および他のすべてのユーザーの読み取り、書き込み、および実行パーミッションを指定するために使用される 3 桁の 8 進値で表されます。

chmod の構文:

chmod(path, mode)

このコマンドは、次の 2つの引数を取ります。

  1. 1つ目は、権限を変更するファイルへのパスです。
  2. 2つ目は、設定する権限です。

filename という名前のファイルに対して、全員に読み取りと書き込みの許可を与えたいとしましょう。 次のコマンドを使用します。

chmod 777 filename

上記のコマンドの Python スクリプトは次のようになります。

import os

os.chmod("my_file", 0o777)

このコードは、次のように表すこともできます。

import os
import stat

path = "E:\Project\file1.txt"

# stat.S_IRWXU --> All permissions (Read, write, and execute) to the owner
# stat.S_IRWXG --> All permissions (Read, write, and execute) to group
# stat.S_IRWXO --> All permissions (Read, write, and execute) to others

print(os.chmod(path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO))

これにより、特定のファイルの読み取り、書き込み、および実行のアクセス許可が全員に付与されます。

chmod で 3つの 8 進数が表すもの

ファイルのアクセス許可は、8 進数を使用して表すことができます。 8 進数は 3 桁で構成され、それぞれが異なる許可を表します。

  1. 最初の桁は所有者の許可を表します。
  2. 2 桁目は、グループの権限を表します。
  3. 3 桁目は、他のユーザーの権限を表します。

ファイルのパーミッションは、希望するパーミッションを表す 8 進数で chmod コマンドを使用して変更できます。

たとえば、ファイルの所有者に読み取り、書き込み、実行のパーミッションを与え、グループと他のユーザーには読み取りと実行のパーミッションのみを与えるには、8 進数 755 を使用できます。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error