Python でファイルのアクセス許可を変更する

Olorunfemi Akinlua 2023年6月21日
  1. Python での OS ファイルのアクセス許可
  2. chmod() を使用して Python でファイルのアクセス許可を変更する
Python でファイルのアクセス許可を変更する

Python 内または Python アプリケーションの周りでファイルを操作する場合、意図した操作を実現するために、適切なファイル アクセス許可を持っていることが不可欠な場合があります。 作業スクリプト ファイルからデータ エクスポートまで、Python アプリケーションによって作成、更新、または管理されるファイルは、Python コードでも処理できます。

通常、ほとんどの開発者がファイルのアクセス許可を操作する通常の方法は、コマンド ライン コマンドまたはスクリプトを使用することです。 ただし、特定の組み込みライブラリとそのメソッドを使用して、Python 内でファイルのアクセス許可を変更することは可能です。

この記事では、Python でファイルのアクセス許可を変更する方法について説明します。

Python での OS ファイルのアクセス許可

Windows から Linux までのオペレーティング システム内では、さまざまな権限がネイティブに設定されています。 ファイルには、目的に応じて読み取り、書き込み、および実行のパーミッションが設定されます。

多くの場合、ファイル エクスプローラーは、一般的なユーザーがファイルに付与されたファイル アクセス許可を変更できるようにする UI を提供します。 ただし、ほとんどの開発者にとって、コマンド ライン インターフェースはそれが行われる場所です。

Linux (通常は Unix システム) や Windows の場合でも、ファイルが保持する他の情報の中で、ファイルのアクセス許可を確認できます。

Windows の場合:

ls

出力:

Directory: C:\Users\USER

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         7/13/2022   8:09 PM                .android
d-----         9/23/2022   8:11 PM                .vscode
d-r---          5/9/2022   1:34 PM                3D Objects
d-----         5/12/2022  11:49 PM                Apple
d-----         8/30/2022   1:20 PM                Autodesk
d-r---         3/18/2022   6:34 AM                Contacts
d-r---         9/23/2022   8:19 PM                Desktop
d-r---         9/23/2022   8:52 PM                Documents
d-r---         9/28/2022  12:48 PM                Downloads
d-r---         3/18/2022   6:34 AM                Favorites
d-r---         4/28/2022  11:03 AM                Links
d-r---         7/16/2022  10:41 PM                Music
d-r---         4/11/2022  11:39 PM                OneDrive
d-r---         9/22/2022  11:13 AM                Pictures
d-r---         3/18/2022   6:34 AM                Saved Games
d-r---         3/18/2022   6:35 AM                Searches
d-r---         9/26/2022   2:49 PM                Videos
-a----         9/23/2022   8:25 PM              5 .node_repl_history
-a----         9/27/2022   2:34 AM           1100 pslog.txt

モード タブは、ファイルの種類を示す最初の列である ファイル許可 情報を保持します。

同様に、Linux などの Unix システムでは、すべてのファイル情報を一覧表示できます。

ls -la

出力:

drwxr-xr-x   6 eva        users         1024 Jun  8 16:46 sabon
-rw-------   1 eva        users         1564 Apr 28 14:35 splus
-rw-------   1 eva        users         1119 Apr 28 16:00 splus2
-rw-r--r--   1 eva        users         9753 Sep 27 11:14 ssh_known_hosts
-rw-r--r--   1 eva        users         4131 Sep 21 15:23 swlist.out
-rw-r--r--   1 eva        users        94031 Sep  1 16:07 tarnti.zip

また、最初の列にはモード (drwxr-xr-x) が保持されます。 最初の列には、4つの内訳があります。

最初の内訳は、実際のファイル タイプを表す最初の文字です。 2 番目の内訳 (次の 3 文字) は、ユーザーのアクセス権 (または権限) を示します。

3 番目の内訳 (次の 3 文字) は、ファイルを所有するグループの権限を示しています。 最後の内訳 (最後の 3 文字) は、他のユーザーの権限を示しています。

では、この drwxr-xr-x モードを使って説明しましょう。 先に進む前に、3つの文字が何を表しているかを知っておく必要があります。

  1. r は読み取りを意味します。
  2. w は書き込みを意味します。
  3. x は実行を意味します。

各ファイルまたはディレクトリには、ファイルの所有者、関連するユーザーのグループのメンバーなどのアクセス権が割り当てられます。 権限は次のように設定できます。

  1. ファイルを読み込みます。
  2. ファイルを書き込みます。
  3. ファイルを実行します。

最初の文字 d は、ディレクトリであることを示します。 ただし、文字が - の場合は一般的なファイルです。

次の 3つの文字セット rwx は、ユーザーがディレクトリを読み取り、書き込み、実行できることを意味します。 次の 3つの r-x は、グループがディレクトリの読み取りと実行はできるが、書き込みはできないことを意味します。

最後の 3つの r-x は、他のユーザーがディレクトリの読み取りと実行はできるが、書き込みはできないことを意味します。

そのため、Linux でファイルのパーミッションを変更するには、単純な chmod コマンド が役立つことがよくあります。

chmod u+x someFile

u+xsomeFile に与えられたパーミッションです。

u+x パーミッションは、someFile のユーザー (remember、user、group、およびその他のユーザー) に (+) 実行権を追加します。 実行することは x で表されることを思い出してください。

しかし、これは Python 内で非常に簡単に実現できます。 この知識があれば、問題なく Python 内のファイルのアクセス許可を変更できるようになりました。

chmod() を使用して Python でファイルのアクセス許可を変更する

chmod() メソッドは、Linux 内の chmod コマンドに由来します。このコマンドの仕事は、ファイルまたはディレクトリのモードを変更することです。 chmod() メソッドは、os モジュールを介して利用できます。これは、Python のインストールまたは環境のデフォルトです。

os モジュールは、あらゆるオペレーティング システムと対話できるようにするインターフェイスとメソッドを提供します。 システムに応じて、NT または Posix 用の OS ルーチンを提供します。

多くの機能の中で、ディレクトリを管理し、そのコンテンツを取得し、そのようなディレクトリ内の動作とモードを変更できます。

chmod() メソッドとは別に、os.stat()os.lstat() の結果を解釈するための 定数/関数を提供する stat という別のモジュールが必要です。 この stat は、ユーザー、グループ、または他のユーザー全体でファイルのアクセス許可を変更するために必要なアクセス許可フラグを提供します。

アクセス許可フラグには、読み取り、書き込み、および実行操作が含まれます。

chmod()stat を使用するには、それらのモジュールをインポートする必要があります。

import os
import stat

また、パーミッションを変更したいファイルにアクセスする必要があります。 そのためにも os モジュールが役に立ちます。

chmod() は次の構文で動作します:

os.chmod(filePath, permissionFlag)

ファイル (たとえば、新しく作成された index.txt) の現在のアクセス許可モードを確認するには、stat() メソッドを使用できます。

perm = os.stat("index.txt")
print(perm.st_mode)

出力:

33206

os.stat() は指定されたパスのステータスを取得し、st_mode プロパティはファイルのパーミッション ビットを提供します。最初の 2 桁の 8 進数はファイル タイプを指定し、残りの 4 桁はファイルのパーミッションです。

このファイルは、Python ファイルと同じディレクトリ内にあるか、完全なファイル パスを配置する必要があります。

Linux ユーザーの 8 進数表記 (パーミッションを指定する 2つの方法のうちの 1つ) を使用すると、パーミッション設定を一連のビットとして考えることができます。これについては、以下のコード スニペットで説明されています。

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

# rwx = 111 in binary = 7
# rw- = 110 in binary = 6
# r-x = 101 in binary = 5
# r-- = 100 in binary = 4

許可モードを変更するには、stat 許可フラグを使用できます。

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IWGRP)

perm = os.stat("index.txt")
print(perm.st_mode)

出力:

33206
33060

最初の 8 進数は変更前の権限状態を示し、2 番目の 8 進数はグループ権限による読み取りを追加した後の状態を示します。

| を使用して、さまざまな権限フラグを組み合わせることができます。 オペレーター。 この例では、ユーザーが読み取り、書き込み、および実行するためのアクセス許可を追加します。

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC | stat.S_IRUSR)

perm = os.stat("index.txt")
print(perm.st_mode)

出力:

33060
33206

以下に示す他の許可フラグがあります。

  1. ユーザーの読み取り、書き込み、および実行権限をファイルに追加するための stat.S_IREADstat.S_IWRITE、および stat.S_IEXEC フラグ。
  2. グループの読み取り、書き込み、および実行権限をファイルに追加するための stat.S_IRGRPstat.S_IWGRP、および stat.S_IXGRP フラグ。
  3. stat.S_IROTHstat.S_IWOTH、および stat.S_IXOTH フラグは、他のユーザーの読み取り、書き込み、および実行権限をファイルにそれぞれ追加します。
  4. stat.S_IRWXUstat.S_IRWXG、および stat.S_IRWXO フラグは、それぞれユーザー、グループ、およびその他のユーザーの読み取り、書き込み、および実行権限を同時に追加します。

許可フラグを使用する以外に、chmod() メソッド内で 8 進数表記を使用できます。 8 進数 755 を使用してみましょう。これは、ユーザーが読み取り、書き込み、および実行でき、グループと他のユーザーが読み取りと実行のみできることを指定します。

os.chmod("index.txt", 0o755)

出力:

33206

0o プレフィックスを追加して、8 進数であることを示す必要があります。

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Python File