”はやぶさ”の技術ノート

pathlibの使い方

pythonでファイル・ディレクトリ操作

python3.4以降で追加された”pathlib”というモジュールを使って、ファイル・ディレクトリ(より正確にはpath)を操作する方法

前提条件

以下のディレクトリツリーで検証を行う

workspace -- test_pathlib.py 
        | -- tmp -- doc -- doc1.txt
               |      | -- doc2.txt
               |      | -- メモ.txt
               |
               | -- img -- 000001.jpg
                      | -- 000002.jpg
                      | -- 000003.jpg
                      | -- memo.txt

import

”pathlib”以外は何もいらない

In [8]:
from pathlib import Path

カレント(現在位置)取得

"."で表現される

In [9]:
current = Path()
print(current)
.

ディレクト設定

”/” で繋げるだけ

In [10]:
dir_tmp = current / 'tmp'
dir_doc = current / 'tmp' /'doc'
dir_img = current / 'tmp' /'img'

print(dir_tmp)
print(dir_doc)
print(dir_img)
tmp
tmp\doc
tmp\img

pathが実存するか確認

True or False で有無が確認できる

In [11]:
check_path1 = current / 'tmp' / 'lib'
check_path2 = current / 'tmp' / 'doc' / 'メモ.txt'

print(check_path1.exists())
print(check_path2.exists())
False
True

ファイル名取得(拡張子あり)

In [12]:
get_name1 = check_path2.name
print(get_name1)
メモ.txt

ファイル名取得(拡張子なし)

In [13]:
get_name2 = check_path2.stem
print(get_name2)
メモ

拡張子のみ取得

In [14]:
get_extension = check_path2.suffix
print(get_extension)
.txt

ファイル・フォルダの一覧取得(リスト化)

In [16]:
dir_tmp = current / 'tmp'
dir_doc = current / 'tmp' /'doc'
dir_img = current / 'tmp' /'img'

print('======= dir_tmp ======')
for path_tmp in dir_tmp.iterdir():
    print(path_tmp)
    
print('======= dir_doc ======')
for path_doc in dir_doc.iterdir():
    print(path_doc)
    
print('======= dir_img ======')
for path_img in dir_img.iterdir():
    print(path_img) 
======= dir_tmp ======
tmp\doc
tmp\img
======= dir_doc ======
tmp\doc\doc1.txt
tmp\doc\doc2.txt
tmp\doc\メモ.txt
======= dir_img ======
tmp\img\000001.jpg
tmp\img\000002.jpg
tmp\img\000003.jpg
tmp\img\memo.txt

指定ファイルのみリスト化

jpgファイルのみリスト化

In [17]:
list_img = list(dir_img.glob('**/*.jpg'))
print(list_img)
[WindowsPath('tmp/img/000001.jpg'), WindowsPath('tmp/img/000002.jpg'), WindowsPath('tmp/img/000003.jpg')]

生成リストのpath取得

In [18]:
for get_path in list_img:
    print(get_path)
tmp\img\000001.jpg
tmp\img\000002.jpg
tmp\img\000003.jpg

生成リストからファイル名のみ取得(拡張子あり)

In [19]:
for get_file in list_img:
    print(get_file.name)
000001.jpg
000002.jpg
000003.jpg

生成リストからファイル名のみ取得(拡張子なし)

In [20]:
for get_file in list_img:
    print(get_file.stem)
000001
000002
000003

生成リストからファイル名のみ取得して任意の拡張子をつける

”pathlib”の使い方というより、pythonの文字列操作
リストの拡張子が変わっただけで、実際にファイルの拡張子が変わるわけではない

In [21]:
for get_file in list_img:
    png_file = get_file.stem + '.png'
    print(png_file)
000001.png
000002.png
000003.png

まとめ

今回は、path操作の中でも個人的によく使う 指定ファイルのロード に関する操作についてまとめた。
ファイルのリネーム/中身表示/中身の書き換え…なども出来るらしいが、本稿では触れない。
(必要に迫られたら、追記予定)