文字列

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

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

Python でファイルパスを組み立てる方法について解説します。

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

プログラミングでは、文字列を使ってファイルパスを組み立てる場面によく直面します。この場合は、Windows や Linux といった環境に応じた区切り文字を使うなど、単純な文字列結合だと少し考慮することが出てきます。

Python では、ファイルパスの組み立て方法として以下のような方法があります。

  1. os.path.join を使用する方法
  2. 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.txtsample2.txtsample3.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() でファイルかフォルダかを判定したり、drivename といったプロパティで各種情報にアクセスしたりできるため非常に便利です。

# 新しいファイル用のパスを作成
new_path = path.joinpath('tmp', 'sample4.txt')
print(new_path)
print(type(new_path))

新しいパスを作成したい場合には、joinpath メソッドを使用できます。os.path.join と同様に複数の文字列を指定できるため、パス上のフォルダ名等を複数指定してパスを作ることができます。

お手軽にパス文字列を作成するだけであれば、os.path.join で十分ですが、プログラム中で各種パスの情報を参照しながら処理をする場合は、各種便利なメソッドが使用できるため、pathlib の利用を検討してみてください。

pathlib の公式ドキュメントはこちらを参照してください。

まとめ

Python でファイルパスを組み立てる方法について解説しました。

Python では、ファイルパスの組み立て方法として以下のような方法があります。それぞれの方法について例を使って紹介しました。

  1. os.path.join を使用する方法
  2. pathlib モジュールの joinpath メソッドを使用する方法

お手軽にパス文字列を作成するだけであれば、os.path.join で十分ですが、プログラム中で各種パスの情報を参照しながら処理をするような場合は、pathlib の利用を検討してみてください。

ソースコード

上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました