PythonによるOSに依存しないPathの組み立て方
前書き
Pythonがさまざまな応用分野で使われるようになって関連した記事も増えた。意外な落とし穴として記事がWindowsを使って書かれている場合とmacOS, Linuxを使っている場合とでファイルパス指定におけるデリミタが異なる事が挙げられる。本稿ではそれについて記載している。
概要
Pythonを使用してファイル操作を行う際、ファイルやディレクトリのパスを正しく指定することが重要だ。しかし、OSによってパスのデリミターが異なり、Windowsでは \
、LinuxやmacOSでは /
が使用される。このため、OSに依存しない方法でパスを組み立てることが推奨される。本ドキュメントでは、PythonでOSに依存しないパスの組み立て方について説明する。
OSに依存しないパスの組み立て方
os.path.join
を使用する方法
Pythonの os
モジュールを使用すると、プラットフォームに依存しない方法でパスを組み立てることができる。os.path.join
関数を使うことで、異なるOSにおいても適切なデリミターを使用してパスを結合できる。
例
以下の例では、カレントディレクトリに csv
というディレクトリを作成し、その中に abc.csv
というファイルを書き出す処理を行っている。
import os
import csv
# カレントディレクトリに 'csv' ディレクトリを作成する
os.makedirs('csv', exist_ok=True)
# プラットフォームに依存しない方法でパスを結合
file_path = os.path.join('csv', 'abc.csv')
# ファイルを書き出す
with open(file_path, 'w', newline='') as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerows(abc_data)
説明
os.makedirs('csv', exist_ok=True)
\
os.makedirs
を使用して、指定したパスにディレクトリを作成する。exist_ok=True
を指定することで、ディレクトリが既に存在している場合はエラーを発生させる。os.path.join('csv', 'abc.csv')
\
os.path.join
を使用して、指定したディレクトリとファイル名を結合し、OSに依存しないパスを生成する。Windowsでは\
が、LinuxやmacOSでは/
が使用される。with open(file_path, 'w', newline='') as file:
\
生成したパスを使ってファイルを開き、指定したモード(ここでは書き込みモード)でファイル操作を行う。
注意点
os.path.join
を使用することで、コードが異なるOS環境でも動作するようになりる。特定のOSに依存しないコードを書くことが推奨される。- CSVファイルなどのファイル操作時には、
newline=''
を指定してファイルを開くことで、異なるプラットフォームで改行コードの扱いを統一できる。
まとめ
OSに依存しない方法でパスを組み立てることで、Pythonコードの移植性が向上し、異なる環境での動作が保証される。特に、複数のプラットフォームで動作させる必要がある場合は、os.path.join
を使用することが推奨される。この方法を利用して、クロスプラットフォームなファイル操作を実現して行こう。