ファイル・フォルダ操作 ライブラリ 文法・環境 標準ライブラリ・モジュール

【python】pathlibの使い方【pathオブジェクトによるファイル操作】

pythonの、pathllibモジュールの基本的な使い方について紹介します。

本記事では、下記の内容を紹介しています。

この記事で分かること

■pathlibモジュールについて

■pathlibモジュールの使い方【pathオブジェクトの生成、各メソッドの使い方】

  • pathオブジェクトの生成
  • 絶対パスを取得【resolveメソッド】
  • ファイル、ディレクトリを判定【is_file、is_dirメソッド】
  • ファイルの存在確認【existsメソッド】
  • ファイルを生成【touchメソッド】
  • ファイル名を取得【nameメソッド】
  • ファイルの拡張子を取得【suffixメソッド】
  • ファイルサイズを取得【statメソッド】
  • ファイルを読み込み【read_text】

■pathlibモジュールで、ファイルの一覧を取得

  • ディレクトリ内のファイル一覧を取得【iterdirメソッド】
  • ディレクトリ内のファイル一覧を取得【globメソッド】
  • 再帰的にディレクトリ内のファイル一覧を取得【rglobメソッド】
  • パターンを指定して、ファイルを検索【glob、rglobメソッド】

■pathlibモジュールのその他の使用例

  • パスの連結【 \ 演算子】
  • パスの連結【joinpathメソッド】
  • ファイルをコピー【shutilモジュールとの組合せ】

なお、本記事に記載のサンプルコードは、下記のディレクトリツリーで動作させています。

ディレクトリツリー

スポンサーリンク

pathlibモジュールについて

はじめに、pathlibモジュールについて、簡単に紹介します

pathlibモジュールは、ファイル・ディレクトリのパスを、オブジェクトとして操作できるモジュールになります。

python3.4から追加されました。標準モジュールに含まれているため、pip等でのインストール不要で使用できます。

pathlibモジュールでは、os.pathでできたファイル操作がほぼカバーされています

pathlibモジュールと、os.pathの対応

python公式ドキュメント

ファイルのパス取得や、ファイルかディレクトリかの判定、ファイルの読み込みなど、ひととおりのファイル操作を行うことができます。

スポンサーリンク

pathlibモジュールの使い方を紹介

ここから、サンプルコードを交えながら、pathlibモジュールでできることを紹介してきます。

pathオブジェクトを生成

pathlib.Path( )に、ファイルやディレクトリのパスを渡すことで、pathオブジェクトを生成できます。

パスは、相対パスでも絶対パスでも大丈夫です。

以下、ファイルの相対パスから、pathオブジェクトを生成するサンプルコードです。

### pathオブジェクトを生成(相対パス)
import pathlib

p_text = pathlib.Path(r'test\file1.txt')
print(p_text)
# test\file1.txt

print(type(p_text))
# <class 'pathlib.WindowsPath'>

> <class 'pathlib.WindowsPath'>

Windows環境の場合は、WindowsPath形になります。

絶対パスで、pathオブジェクトを生成する例です。
パスを絶対パスで記載している以外は、相対パスと同じです。

### pathオブジェクトを生成(絶対パス)
import pathlib

p_text = pathlib.Path(r'C:\ *--- 任意のディレクトリ --- * \test\file1.txt')
print(p_text)
# C:\ *--- 任意のディレクトリ --- * \test\file1.txt

print(type(p_text))
# <class 'pathlib.WindowsPath'>

ディレクトリについても同様です。

### ディレクトリのpathオブジェクトを生成
import pathlib

p_dir = pathlib.Path(r'test\folder1')
print(p_dir)
# test\folder1

pathオブジェクトの生成後は、メソッドと組合せて様々なことができます。
以降、各メソッドの使用例を紹介していきます。

絶対パスを取得【resolveメソッド】

pathオブジェクトの、resolveメソッドを用いることで、絶対パスを取得できます

以下、サンプルコードです。

### resolveメソッドで絶対パスを取得
import pathlib

p_text = pathlib.Path(r'test\file1.txt')

print(p_text.resolve())
# C:\ *--- 任意のディレクトリ ---* \test\file1.txt

ファイル、ディレクトリを判定【is_file、is_dirメソッド】

pathオブジェクトの、is_fileメソッド、is_dirメソッドを用いることで、ファイルかどうか、ディレクトリかどうかを判定できます

以下、サンプルコードです。

### ファイル、ディレクトリを判定
import pathlib

p_text = pathlib.Path(r'test\file1.txt')
p_dir = pathlib.Path(r'test\folder1')

print(p_text.is_file())
# True
print(p_dir.is_file())
# False
print(p_text.is_dir())
# False
print(p_dir.is_dir())
# True

ファイルの存在確認【existsメソッド】

pathオブジェクトの、existsメソッドを用いることで、ファイルの存在確認ができます

以下、サンプルコードです。

### ファイルの存在確認
import pathlib

p_text = pathlib.Path(r'test\file1.txt')
p_dummy = pathlib.Path(r'test\xxx.txt')

print(p_text.exists())
# True
print(p_dummy.exists())
# False

ファイルを生成【touchメソッド】

pathオブジェクトの、touchメソッドを使用することで、ファイルを生成できます

以下、サンプルコードです。

### ファイルを生成(touchメソッド)
import pathlib

p_dummy = pathlib.Path(r'test\xxx.txt')

p_dummy.touch()

print(p_dummy.exists())
# True

ファイル名を取得【nameメソッド】

pathオブジェクトの、nameメソッドを使用することで、ファイル名を取得できます

以下、サンプルコードです。

### ファイル名を取得
import pathlib

p_text = pathlib.Path(r'test\file1.txt')

print(p_text.name)
# file1.txt

ファイルの拡張子を取得【suffixメソッド】

pathオブジェクトの、suffixメソッドを使用することで、ファイルの拡張子を取得できます

以下、サンプルコードです。

### 拡張子を取得
import pathlib

p_text = pathlib.Path(r'test\file1.txt')


print(p_text.suffix)
# .txt

ファイルサイズを取得【statメソッド】

pathオブジェクトの、statメソッドを使用することで、ファイルのサイズを取得できます

なお、返されるサイズの単位は、バイトになります。

以下、サンプルコードです。

### ファイルサイズを取得
import pathlib

p_text = pathlib.Path(r'test\file1.txt')

print(p_text.stat().st_size)
# 55

ファイルやディレクトリのサイズの取得方法については、下記の記事でも紹介しています。

ファイル、ディレクトリのサイズの取得方法

ファイルを読み込み【read_text】

pathオブジェクトの、read_textメソッドを使用することで、ファイルの中身を取得できます

以下、サンプルコードです。

### ファイルの中身を取得
import pathlib

p_file = pathlib.Path(r'test\file1.txt')

print(p_file.read_text())
"""
Apple 150
Banana 200
Orange 100
Grape 500
Lemon 100
"""

スポンサーリンク

pathlibモジュールで、ファイルの一覧を取得

pathlibモジュールを用いて、ディレクトリ内のファイルの一覧を取得できます

さまざまなパターンがあるので、いくつか例を紹介します。

ディレクトリ内のファイル一覧を取得【iterdirメソッド】

pathオブジェクトの、iterdirメソッドを使用することで、ディレクトリのファイル一覧を取得できます

以下、サンプルコードです。

### ファイル一覧を取得【iterdirメソッド】
import pathlib
import pprint

p_dir = pathlib.Path(r'test')

iterdir_dir = p_dir.iterdir()
pprint.pprint(list(iterdir_dir))
"""
[WindowsPath('test/file1.txt'),
 WindowsPath('test/file2.txt'),
 WindowsPath('test/folder1'),
 WindowsPath('test/pic1.jpg'),
 WindowsPath('test/pic2.jpg')]
"""

ディレクトリ内のファイル一覧を取得【globメソッド】

pathオブジェクトの、globメソッドを使用することで、ディレクトリ内のファイル一覧を取得できます

globの引数には、"パターン" を渡します。

このパターンを、ワイルドカード " * " にすることで、すべてのファイルの一覧が取得できます。

以下、サンプルコードです。

### ファイル一覧を取得【globメソッド】
import pathlib
import pprint

p_dir = pathlib.Path(r'test')

path_all = p_dir.glob('*')
pprint.pprint(list(path_all))
"""
[WindowsPath('test/file1.txt'),
 WindowsPath('test/file2.txt'),
 WindowsPath('test/folder1'),
 WindowsPath('test/pic1.jpg'),
 WindowsPath('test/pic2.jpg')]
"""

再帰的にディレクトリ内のファイル一覧を取得【rglobメソッド】

pathオブジェクトの、rglobメソッドを使用することで、再帰的にディレクトリ内のファイル一覧を取得できます

rglobメソッドの引数には、globと同様、"パターン" を指定します。

以下、サンプルコードです。

### 再帰的にファイル一覧を取得
import pathlib
import pprint

p_dir = pathlib.Path(r'test')

path_all = p_dir.rglob('*')
pprint.pprint(list(path_all))
"""
[WindowsPath('test/file1.txt'),
 WindowsPath('test/file2.txt'),
 WindowsPath('test/folder1'),
 WindowsPath('test/pic1.jpg'),
 WindowsPath('test/pic2.jpg'),
 WindowsPath('test/folder1/file1-1.txt'),
 WindowsPath('test/folder1/folder1-1'),
 WindowsPath('test/folder1/pic1-1.jpg')]
"""

パターンを指定して、ファイルを検索【glob、rglobメソッド】

pathオブジェクトの、glob、rglobメソッドの引数に、特定のパターンを指定することで、ファイルを検索できます。

以下、rglobメソッドのサンプルコードです。

### ファイルを検索
import pathlib
import pprint

p_dir = pathlib.Path(r'test')

path_text = p_dir.rglob('*.txt')
pprint.pprint(list(path_text))
"""
[WindowsPath('test/file1.txt'),
 WindowsPath('test/file2.txt'),
 WindowsPath('test/folder1/file1-1.txt')]
"""

スポンサーリンク

pathlibモジュールのその他の使用例

以降では、pathlibモジュールのその他の使用例について紹介します。

パスの連結【 \ 演算子】

" \ " 演算子を用いることで、pathオブジェクトのパスを連結できます

以下、" \ " 演算子でパスを連結するサンプルコードです。

### パスの連結【 \ 演算子】
import pathlib

p_dir = pathlib.Path(r'test')

p_file = p_dir / 'file1.txt'
print(p_file)
# test\file1.txt

パスの連結【joinpathメソッド】

pathオブジェクトの、joinpathメソッドを用いても、パスを連結できます。

以下、joinpathメソッドでパスを連結するサンプルコードです。

### パスの連結【joinpathメソッド】
import pathlib

p_dir = pathlib.Path(r'test')

p_file = p_dir.joinpath('file1.txt')
print(p_file)
# test\file1.txt

ファイルをコピー【shutilモジュールとの組合せ】

pathlibモジュールには、ファイルのコピー機能がないため、ファイルをコピーする場合はshutilモジュールと組み合わせます

以下、ファイルをコピーするサンプルコードです。
pathlibモジュールで同名のファイルがないか確認し、ファイルがない場合はコピーを実行します。

### ファイルをコピー【shutilモジュールとの組合せ】
import shutil
import pathlib

src = pathlib.Path(r'test\file1.txt')
dst = pathlib.Path(r'test\file1_copy.txt')

if not dst.exists() :
    shutil.copy2(src, dst)
else :
    print('同じ名前のファイルがあるため、コピーしませんでした')

ファイルのコピー方法については、下記の記事で紹介しています。

ファイル・ディレクトリのコピー方法

スポンサーリンク

まとめ

pythonのpathlibモジュールの基本的な使い方について紹介しました

パスをオブジェクトとして操作する使いやすさは、実際にコードを書いてみるのが一番実感しやすいと思うので、是非積極的にpathlibモジュールを使用してみてください。

スポンサーリンク

-ファイル・フォルダ操作, ライブラリ, 文法・環境, 標準ライブラリ・モジュール
-, ,