はじめに
pathlibみなさん使ってますか?まだ使っていないならぜひ一度使って欲しいです。pathlibは何かというとパス操作できるものです。みなさんos.pathとか使うと思いますが、そのos.pathと大体同じことは、pathlibでできます。しかもpathlibはPythonの標準モジュールです。
この記事の対象者
- pathlibを使ったことのない方
- pathlib知っているけどまだ作ったことない方
- pathlibに興味を持ったた方
ぜひ気になった方、チェックしてみてください。
summary
- ファイル名のみ取得 filename.name
- 拡張子なしのファイル名取得 filename.stem
- ファイルの拡張子のみ filename.suffix
- ファイル読み込み list(dir_path.iterdir()), list(dir_path.glob('*'))
- ディレクトリ作成(中間ディレクトリも) dir_path.mkdir(parents=True)
- ディレクトリ作成(存在していてもエラーはかない) dir_path.mkdir(exist_ok=True)
- 新規ファイル作成 filename.touch()
pathlib
pathlibは、オブジェクト指向のファイルシステムパスです。使い方をみていきましょう。
コンストラクタ
Path()
でPath
オブジェクトを生成できます
>>> from pathlib import Path
>>> Path()
PosixPath('.')
>>> Path('data')
PosixPath('data')
>>>
>>> Path('data/image_0001.jpg')
PosixPath('data/image_0001.jpg')
>>>
ディレクトリかファイルかの判定
is_dir()
, is_file()
を使います
>>> a = Path('data')
>>> a.is_dir()
True
>>> b = Path('data/image_0001.jpg')
>>> b.is_file()
True
>>>
存在しないファイルの確認
>>> p = Path('data/img0.jpg')
>>> p.exists()
False
空ファイル作成
.touch()
を使います
>>> p = Path('data/img0.jpg')
>>> p.exists()
False
>>> p.touch()
>>> p.exists()
True
ディレクトリ直下のファイル一覧取得
iterdir()
かglob()
を使います
>>> a = Path('data')
>>> list(a.iterdir())
[PosixPath('data/img0.jpg'),
PosixPath('data/image_0004.jpg'),
PosixPath('data/image_0005.jpg'),
PosixPath('data/image_0001.jpg'),
PosixPath('data/image_0002.jpg'),
PosixPath('data/image_0003.jpg')]
>>>
>>> list(a.glob('*'))
[PosixPath('data/img0.jpg'),
PosixPath('data/image_0004.jpg'),
PosixPath('data/image_0005.jpg'),
PosixPath('data/image_0001.jpg'),
PosixPath('data/image_0002.jpg'),
PosixPath('data/image_0003.jpg')]
>>>
ファイル名をすべて文字列に変換
str
で文字列に変換します
>>> [str(p) for p in a.iterdir()]
['data/img0.jpg',
'data/image_0004.jpg',
'data/image_0005.jpg',
'data/image_0001.jpg',
'data/image_0002.jpg',
'data/image_0003.jpg']
>>>
ファイル名のみ取得(パスの末尾)
name
属性を使います
>>> [p.name for p in a.iterdir() if p.is_file()]
['img0.jpg',
'image_0004.jpg',
'image_0005.jpg',
'image_0001.jpg',
'image_0002.jpg',
'image_0003.jpg']
>>>
拡張子なしのファイル名取得
stem
属性を使います
>>> [p.stem for p in a.iterdir() if p.is_file()]
['img0',
'image_0004',
'image_0005',
'image_0001',
'image_0002',
'image_0003']
>>>
ファイル名の拡張子を取得
shuffix
属性を使います
>>> [p.suffix for p in a.iterdir() if p.is_file()]
['.jpg', '.jpg', '.jpg', '.jpg', '.jpg', '.jpg']
>>>
ディレクトリの作成
.mkdir()
を使います
>>> c = Path('test')
>>> c.exists()
False
>>> c.mkdir()
>>> c.exists()
True
>>>
中間ディレクトリもまとめて作成
parents=True
に設定する
>>> Path('test/data/001').mkdir(parents=True)
ディレクトリが存在していてもエラーが出ないように
exist_ok=True
を設定する
>>> Path('test/data').mkdir(exist_ok=True)
パスのつなげ方
Path
オブジェクトに対して /
で連結する
os.path.join()
と同じことを/
でできます
>>> d = Path('data')
>>> d / 'train' / '001'
PosixPath('data/train/001')
親ディレクトリの取得
parent
を使います
>>> b
PosixPath('data/image_0001.jpg')
>>> b.parent
PosixPath('data')
終わりに
今回はよく使うものを忘れないようにするために自分の備忘録として書きました。少しでも参考になればと思います。