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でできたファイル操作がほぼカバーされています。
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モジュールを使用してみてください。
スポンサーリンク