【Python】ファイルパスを組み立てる方法

Python でファイルパスを組み立てる方法について解説します。
ファイルパスを組み立てる方法
プログラミングでは、文字列を使ってファイルパスを組み立てる場面によく直面します。この場合は、Windows や Linux といった環境に応じた区切り文字を使うなど、単純な文字列結合だと少し考慮することが出てきます。
Python では、ファイルパスの組み立て方法として以下のような方法があります。
os.path.joinを使用する方法pathlibモジュールのjoinpathメソッドを使用する方法
この記事では、Python でファイルパスを組み立てる方法を例を使って紹介します。
os.path.join を使用する方法
os.path.join を使用する方法について紹介します。os.path.join は、環境に応じたパス区切り文字を補うため、環境に合わせた区切り文字判定の考慮が不要です。
import os
target_path = r"D:\test"
# 対象フォルダ内のファイル名を順に取得し、パスを作成
for f in os.listdir(target_path):
# os.path.joinでフォルダパスとファイル名を結合
tmp_path = os.path.join(target_path, f)
print(tmp_path)
print("=====")
# 新しいファイル用のパスを作成
new_path = os.path.join(target_path, "tmp", "sample4.txt")
print(new_path)D:\test\sample1.txt D:\test\sample2.txt D:\test\sample3.txt ===== D:\test\tmp\sample4.txt
例では、あらかじめ D ドライブに test というフォルダを作成し、sample1.txt、sample2.txt、sample3.txt というファイルを用意してあります。任意のフォルダにファイルを用意して試してみてください。
os.listdir で対象フォルダのファイル名をリストアップできるため、取得できたファイル名を for で繰り返しながら os.path.join でパスを作成しています。
また、新しい sample4.txt 用のパスを作成したい場合にも簡単に作成できます。os.path.join の引数には連結対象の複数の文字列を指定できるため、パス上のフォルダ名を複数指定してパスを作ることができます。
pathlib モジュールの joinpath メソッドを使用する方法
os.path.join を使うことで簡単にファイルパスを作ることができましたが、より高水準なパスオブジェクトを提供してくれる pathlib モジュールというものがあります。
pathlib モジュールは、ファイルシステムのパスを表すクラスを提供しており、各種便利なメソッドを使用できます。上記で紹介した os.path.join と同じ内容を pathlib で実装する例を見てみましょう。
import pathlib
target_path = r"D:\test"
# Pathオブジェクトを作成
path = pathlib.Path(r"D:\test")
# 対象フォルダ内のファイルを取得
file_path = [x for x in path.iterdir() if x.is_file()]
print(file_path)
# 色々なメソッドを使用することが可能
print(file_path[0].is_file())
print(file_path[0].is_dir())
print(file_path[0].drive)
print(file_path[0].name)
print("=====")
# 新しいファイル用のパスを作成
new_path = path.joinpath("tmp", "sample4.txt")
print(new_path)
print(type(new_path))【実行結果】
[WindowsPath('D:/test/sample1.txt'), WindowsPath('D:/test/sample2.txt'), WindowsPath('D:/test/sample3.txt')]
True
False
D:
sample1.txt
=====
D:\test\tmp\sample4.txt
<class 'pathlib.WindowsPath'>以降でポイントを分けて説明していきます。
import pathlib target_path = r"D:\test" # Pathオブジェクトを作成 path = pathlib.Path(r"D:\test")
pathlib モジュールをインポートし、pathlib.Path に対象パスを渡すことでパス用のオブジェクトを作成します。
Path オブジェクトは iter_dir() を用いることでファイルパスを順に取得できます。リスト内包表記を使って、各ファイルパスを取得していますが「if x.is_file()」とすることでファイルの場合のみ取得しています。例えば、この部分を x.is_dir() とすればディレクトリ(フォルダ)のみを取得することも可能です。
# 対象フォルダ内のファイルを取得 file_path = [x for x in path.iterdir() if x.is_file()] print(file_path) # 色々なメソッドを使用することが可能 print(file_path[0].is_file()) print(file_path[0].is_dir()) print(file_path[0].drive) print(file_path[0].name)
os.path.join で扱うパスは文字列ですが pathlib で扱うのはパス用オブジェクトのため、is_file() や is_dir() でファイルかフォルダかを判定したり、drive、name といったプロパティで各種情報にアクセスしたりできるため非常に便利です。
# 新しいファイル用のパスを作成
new_path = path.joinpath('tmp', 'sample4.txt')
print(new_path)
print(type(new_path))新しいパスを作成したい場合には、joinpath メソッドを使用できます。os.path.join と同様に複数の文字列を指定できるため、パス上のフォルダ名等を複数指定してパスを作ることができます。
お手軽にパス文字列を作成するだけであれば、os.path.join で十分ですが、プログラム中で各種パスの情報を参照しながら処理をする場合は、各種便利なメソッドが使用できるため、pathlib の利用を検討してみてください。
まとめ
Python でファイルパスを組み立てる方法について解説しました。
Python では、ファイルパスの組み立て方法として以下のような方法があります。それぞれの方法について例を使って紹介しました。
os.path.joinを使用する方法pathlibモジュールのjoinpathメソッドを使用する方法
お手軽にパス文字列を作成するだけであれば、os.path.join で十分ですが、プログラム中で各種パスの情報を参照しながら処理をするような場合は、pathlib の利用を検討してみてください。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。







