Pythonによるファイルパス操作:osモジュールとモダンなpathlib

この記事では、Pythonでファイルやフォルダのパスを扱うための基本的な方法について解説します。OS(Windows, macOS, Linux)間の差異を吸収し、環境に依存しない堅牢なコードを書くためのosモジュールと、よりモダンで推奨されるpathlibモジュールの使い方を紹介します。


目次

ファイルパスの構築

Windowsではパスの区切り文字にバックスラッシュ\を、macOSやLinuxではスラッシュ/を使用します。このようなOSによる違いを吸収するため、Pythonには専用のツールが用意されています。

従来のos.path.join()を使う方法 os.path.join()関数は、実行されているOSに適した区切り文字を自動的に使用して、複数の文字列を一つのパスに結合します。

import os

# OSに応じて適切なパスを生成
# Windows -> 'C:\\Users\\Default\\Documents'
# macOS/Linux -> '/Users/Default/Documents'
path = os.path.join('Users', 'Default', 'Documents')
print(path)

# ファイル名との結合
file_list = ['report.pdf', 'data.csv', 'image.png']
base_path = 'C:\\UserFiles\\ProjectA' # Windowsの例
for file_name in file_list:
    full_path = os.path.join(base_path, file_name)
    print(full_path)

モダンなpathlibモジュールを使う方法 Python 3.4以降では、パスをオブジェクトとして直感的に扱えるpathlibモジュールが推奨されています。スラッシュ/演算子を使って、OSの違いを意識することなくパスを結合できます。

from pathlib import Path

# Pathオブジェクトを作成し、/ 演算子で結合
home_dir = Path('/home/user')
docs_dir = home_dir / 'documents' / 'report.pdf'
print(docs_dir) # 出力: /home/user/documents/report.pdf

pathlibを使うと、より簡潔で読みやすいコードになります。


カレントディレクトリの操作

カレントディレクトリとは、プログラムが現在作業しているフォルダのことです。

os.getcwd()で現在のカレントディレクトリを取得し、os.chdir()でカレントディレクトリを変更できます。

import os

# 現在のカレントディレクトリを取得
current_dir = os.getcwd()
print(f"現在のディレクトリ: {current_dir}")

# ディレクトリを変更 (パスは自身の環境に合わせてください)
# os.chdir('/Users/Default') 
# print(f"変更後のディレクトリ: {os.getcwd()}")

# 存在しないディレクトリに移動しようとするとエラーになる
try:
    os.chdir('C:\\NonExistentFolder')
except FileNotFoundError:
    print("エラー: 存在しないディレクトリです。")

絶対パスと相対パス

パスの指定方法には絶対パス相対パスの2種類があります。

絶対パスは、システムのルートディレクトリから始まる完全なパスです(例: C:\Windows\System32/usr/bin)。 相対パスは、カレントディレクトリを基準としたパスです(例: images/logo.png)。


新しいフォルダの作成

os.makedirs()関数は、新しいフォルダを作成します。この関数の便利な点は、途中のフォルダが存在しない場合でも、それらをすべて含めて再帰的に作成してくれることです。

import os

# 途中のフォルダも含めて作成
os.makedirs('C:\\MyPythonApp\\data\\raw', exist_ok=True)

exist_ok=Trueを指定すると、フォルダが既に存在していてもエラーになりません。

pathlibでも同様の操作が可能です。

from pathlib import Path

# parents=Trueで中間フォルダも作成、exist_ok=Trueでエラーを抑制
Path('C:/MyPythonApp/data/processed').mkdir(parents=True, exist_ok=True)

まとめ

Pythonでファイルパスを扱う際は、OS間の互換性を保つためにパス文字列を直接結合するのではなく、os.path.join()や、より現代的で推奨されるpathlibモジュールを使用することが重要です。カレントディレクトリの操作や新しいフォルダの作成も、これらのモジュールを通じて簡単に行うことができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次