os モジュールに関する基本をまとめました。
特に「OSプロセス管理」「ファイル・ディレクトリ操作」「OS情報の取得」といった操作について学びました。
プロセスIDを取得する:os.getpid() / os.getppid()
現在のプロセスIDと、その親プロセスIDを取得するには os.getpid() と os.getppid() を使います。
import os
print("現在のプロセスID:", os.getpid())
print("親プロセスID:", os.getppid())
現在のプロセスID: 12345
親プロセスID: 6789
環境変数を扱う:os.environ
環境変数の値を取得したいときは os.environ.get()、新たに設定したいときは os.environ[...] = 値 を使います。
print(os.environ.get("HOME")) # 環境変数の取得
os.environ["MY_ENV"] = "test" # 環境変数の設定
print(os.environ["MY_ENV"])
/Users/yourname
test
カレントディレクトリの確認と移動:os.getcwd() / os.chdir()
現在の作業ディレクトリを確認するには os.getcwd() を、移動するには os.chdir() を使います。
print("カレントディレクトリ:", os.getcwd())
os.chdir("..") # 1つ上のディレクトリに移動
print("移動後:", os.getcwd())
カレントディレクトリ: /Users/yourname/project
移動後: /Users/yourname
ディレクトリの作成と削除:os.mkdir() / os.rmdir()
単一のディレクトリを作成・削除する場合には os.mkdir() と os.rmdir() を使います。
os.mkdir("test_dir") # ディレクトリの作成
os.rmdir("test_dir") # ディレクトリの削除
階層付きディレクトリの作成と削除:os.makedirs() / os.removedirs()
複数階層のディレクトリをまとめて作成・削除したいときは os.makedirs() と os.removedirs() を使います。
os.makedirs("parent/child") # ネストしたディレクトリ作成
os.removedirs("parent/child") # 空のディレクトリ階層を削除
階層付きの名前変更・移動:os.renames()
ファイルやディレクトリの名前を変更したり、別の場所へ移動したいときは os.rename() を使いますが、階層をまたぐ移動や中間ディレクトリの作成・削除も自動で行いたい場合は os.renames() が便利です。
import os
# もとのファイルを作成
os.makedirs("old_dir", exist_ok=True)
with open("old_dir/sample.txt", "w") as f:
f.write("Hello")
# 階層をまたいで移動・名前変更
os.renames("old_dir/sample.txt", "new_dir/subdir/renamed.txt")
結果:
- sample.txt が renamed.txt という名前になり、
- new_dir/subdir/ に移動される
- 元の old_dir が空になった場合、自動で削除される
このように os.renames() は、移動先の中間ディレクトリが存在しない場合は自動で作成し、移動後に空になった元のディレクトリがあればそれも自動で削除してくれます。
補足
- 移動先ディレクトリがすでに存在している場合は、そのままファイルが移動されます。
- 空でないディレクトリは削除されません。
- Windows でも Unix 系 OS でも使えます。
ファイルの存在確認と削除:os.path.exists() / os.remove()
ファイルが存在するか確認したいときは os.path.exists()、削除するには os.remove() を使います。
os.path.exists("example.txt") # 存在確認(True / False)
os.remove("example.txt") # ファイル削除
パス情報の取得・結合:os.path.basename() / os.path.dirname() / os.path.join()
ファイルパスからファイル名やディレクトリ名を取得したり、パスを結合するには以下の関数を使います:
-
os.path.basename():ファイル名部分を取得 -
os.path.dirname():ディレクトリ部分を取得 -
os.path.join():複数のパスを安全に結合
path = "/Users/yourname/sample.txt"
print(os.path.basename(path)) # sample.txt
print(os.path.dirname(path)) # /Users/yourname
print(os.path.join("folder", "file.txt")) # folder/file.txt
sample.txt
/Users/yourname
folder/file.txt
実行中のOSを判定する:os.name
現在実行中のPythonが動作しているOSの種類を判定したいときは os.name を参照します。
import os
print(os.name) # 'posix'(Unix系), 'nt'(Windows)
posix
おわりに
今回は os モジュールを使って、プロセス情報の取得、環境変数の操作、ファイル・ディレクトリ操作、OSの種類判定などについて学びました。
各関数の役割が明確に分かれているので、何をしたいのかに応じて使い分けるのが大事だと感じました。