Pythonのosモジュール徹底解説! ファイル・ディレクトリ操作の基本から応用まで
Pythonプログラミングにおいて、ファイルやディレクトリを操作することは非常に頻繁に発生します。そんな時に強力な味方となるのが、標準ライブラリである**osモジュール**です。この記事では、osモジュールの基本的な使い方から、知っておくと便利な応用例まで、分かりやすく解説していきます。
osモジュールとは?
osモジュールは、オペレーティングシステム(OS)が提供する機能にPythonからアクセスするためのインターフェースを提供します。これにより、ファイルやディレクトリの作成・削除、パスの操作、環境変数の取得など、OSレベルの操作をPythonスクリプト内で行うことができます。
なぜosモジュールを使うのか?
Pythonにはファイルを扱うための他のモジュールもありますが、osモジュールを使うべき主な理由は以下の通りです。
-
クロスプラットフォーム性: Windows、macOS、Linuxなど、異なるOS上でも同じコードで動作します。OSごとの違いを
osモジュールが吸収してくれます。 -
低レベルな制御: ファイルやディレクトリのより低レベルな操作を直接行えます。
-
環境情報へのアクセス: 環境変数や現在の作業ディレクトリなど、OSの環境情報を取得・設定できます。
osモジュールの主要機能とサンプルコード
それでは、osモジュールの主要な機能を見ていきましょう。
1. 現在の作業ディレクトリの取得と変更
スクリプトが現在どのディレクトリで実行されているかを確認したり、作業ディレクトリを変更したりする際に使用します。
-
os.getcwd(): 現在の作業ディレクトリのパスを取得します。 -
os.chdir(path): 作業ディレクトリを指定したパスに変更します。
import os
print(f"現在の作業ディレクトリ: {os.getcwd()}")
# 作業ディレクトリを変更する例 (実行しない場合はコメントアウト)
# os.chdir("..")
# print(f"変更後の作業ディレクトリ: {os.getcwd()}")
2. ディレクトリの作成と削除
ディレクトリ(フォルダ)の作成や削除を行う際に使用します。
-
os.mkdir(path): 指定したパスにディレクトリを作成します。既に存在する場合はエラーになります。 -
os.makedirs(path): 途中のディレクトリが存在しない場合でも、それらを含めてディレクトリを作成します。 -
os.rmdir(path): 指定したパスの空のディレクトリを削除します。ディレクトリ内にファイルやサブディレクトリがある場合はエラーになります。 -
os.removedirs(path): 指定したパスのディレクトリと、そのパスに含まれる空の親ディレクトリを再帰的に削除します。
import os
# ディレクトリ作成
os.makedirs("my_new_dir/sub_dir", exist_ok=True) # 存在してもエラーにしない
print("ディレクトリ 'my_new_dir/sub_dir' を作成しました。")
# ディレクトリ削除
os.rmdir("my_new_dir/sub_dir")
os.rmdir("my_new_dir")
print("ディレクトリ 'my_new_dir/sub_dir' と 'my_new_dir' を削除しました。")
ポイント: exist_ok=Trueをos.makedirs()に渡すと、ディレクトリが既に存在する場合にエラーが発生しなくなります。
3. ファイルの削除と名前変更
ファイルの削除や名前変更を行う際に使用します。
-
os.remove(path): 指定したパスのファイルを削除します。 -
os.rename(src, dst):srcのファイルまたはディレクトリの名前をdstに変更します。
import os
# テストファイルの作成
with open("test_file.txt", "w") as f:
f.write("Hello, os module!")
# ファイルの名前変更
os.rename("test_file.txt", "renamed_file.txt")
print("ファイル 'test_file.txt' を 'renamed_file.txt' に変更しました。")
# ファイルの削除
os.remove("renamed_file.txt")
print("ファイル 'renamed_file.txt' を削除しました。")
4. パスの操作 (os.pathモジュール)
ファイルパスの操作は非常に重要です。osモジュールにはos.pathというサブモジュールがあり、パスの結合、分割、存在確認など、便利な機能を提供します。
-
os.path.join(path, *paths): 複数のパス要素をOSに適した区切り文字で結合します。 -
os.path.split(path): パスをディレクトリ部分とファイル名部分に分割します。 -
os.path.exists(path): 指定したパスが存在するかどうかを判定します。 -
os.path.isfile(path): 指定したパスがファイルであるかどうかを判定します。 -
os.path.isdir(path): 指定したパスがディレクトリであるかどうかを判定します。 -
os.path.abspath(path): 相対パスを絶対パスに変換します。
import os
# パスの結合
file_path = os.path.join("my_documents", "reports", "annual_report.pdf")
print(f"結合されたパス: {file_path}")
# パスの分割
directory, filename = os.path.split(file_path)
print(f"ディレクトリ: {directory}, ファイル名: {filename}")
# パスの存在確認
print(f"現在のディレクトリが存在するか?: {os.path.exists('.')}")
print(f"存在しないファイルが存在するか?: {os.path.exists('non_existent_file.txt')}")
# ファイルかディレクトリかの判定
# 適当なファイルを作成して試す
with open("temp.txt", "w") as f: f.write("temp")
print(f"'temp.txt' はファイルか?: {os.path.isfile('temp.txt')}")
print(f"'.' はディレクトリか?: {os.path.isdir('.')}")
os.remove("temp.txt") # 作成したファイルを削除
5. ディレクトリ内のファイル・ディレクトリ一覧取得
特定のディレクトリ内にあるファイルやサブディレクトリの一覧を取得します。
-
os.listdir(path='.'): 指定したパス内のファイルとディレクトリの名前のリストを返します。
import os
# 現在のディレクトリの内容を表示
print("現在のディレクトリの内容:")
for item in os.listdir('.'):
print(item)
# サブディレクトリを作成して確認
os.makedirs("temp_dir", exist_ok=True)
with open("temp_dir/file1.txt", "w") as f: f.write("1")
with open("temp_dir/file2.txt", "w") as f: f.write("2")
print("\n'temp_dir' の内容:")
for item in os.listdir('temp_dir'):
print(item)
# 後片付け
os.remove("temp_dir/file1.txt")
os.remove("temp_dir/file2.txt")
os.rmdir("temp_dir")
6. 環境変数の操作
OSの環境変数にアクセスしたり、設定したりすることができます。
-
os.environ: 環境変数への辞書のようなアクセスを提供します。 -
os.getenv(key, default=None): 指定した環境変数の値を取得します。存在しない場合はdefaultを返します。 -
os.putenv(key, value): 環境変数を設定します(非推奨、os.environを使用することを推奨)。
import os
# 特定の環境変数の取得
# 例: PATH環境変数を取得 (OSによって出力内容は異なります)
print(f"PATH環境変数: {os.getenv('PATH', 'PATH環境変数が設定されていません')}")
# 新しい環境変数を設定(このスクリプト内でのみ有効)
os.environ['MY_TEST_VAR'] = 'Hello from Python!'
print(f"MY_TEST_VAR: {os.getenv('MY_TEST_VAR')}")
# 設定した環境変数を削除
del os.environ['MY_TEST_VAR']
print(f"MY_TEST_VAR (削除後): {os.getenv('MY_TEST_VAR', 'MY_TEST_VARは削除されました')}")
osモジュールとpathlibモジュール、どちらを使うべき?
Python 3.4以降では、よりオブジェクト指向でモダンなファイルパス操作を提供する**pathlibモジュール**が導入されました。
-
osモジュール: より低レベルで、文字列ベースのパス操作に適しています。 -
pathlibモジュール: パスをオブジェクトとして扱い、メソッドチェーンで操作できるため、より直感的で可読性の高いコードを書くことができます。
どちらを使うべきかという明確なルールはありませんが、新しいプロジェクトや、パス操作が複雑になる場合はpathlibの利用を検討することをおすすめします。 簡単な操作や既存のコードとの互換性を優先する場合はosモジュールも依然として有効な選択肢です。
まとめ
この記事では、Pythonのosモジュールについて、その基本的な使い方から応用例までを解説しました。
-
os.getcwd(),os.chdir()で作業ディレクトリを操作 -
os.mkdir(),os.makedirs(),os.rmdir(),os.remove()でファイル・ディレクトリを管理 -
os.rename()でファイル・ディレクトリの名前を変更 -
os.pathサブモジュールでパスを安全に操作 (os.path.join(),os.path.exists(),os.path.isfile(),os.path.isdir()など) -
os.listdir()でディレクトリの内容をリストアップ -
os.environで環境変数を操作
osモジュールを使いこなすことで、Pythonでのファイル・ディレクトリ操作が格段に効率的になります。ぜひ、ご自身のプロジェクトで活用してみてください。
もし、この記事でさらに深掘りしてほしい機能や、具体的なユースケースがあれば、ぜひコメントで教えてください!
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

