483
435

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python3.4以降ならos.pathはさっさと捨ててpathlibを使うべき

Last updated at Posted at 2017-07-23

Python3.4でファイルパス操作を行うモジュールとしてpathlibが追加されました。

今までファイルパス操作はos.pathglobを使っていましたが、pathlibを使うとファイルパスの連続操作がとても書きやすくなるので積極的に使うべきです。

pathlibの特徴

pathlibは次のような特徴があります。

  • オブジェクト指向
  • ファイルパス操作機能の統合

オブジェクト指向

今まで使っていたos.pathなどでは独立した関数で機能を提供していました。

これに対してpathlibではPathクラスのメソッドやプロパティとして機能が提供されています。

pathlib
>>> from pathlib import Path
>>> Path('/a/b/c.txt').parent
PosixPath('/a/b')
>>> Path('/a/b/c.txt').parents[1]
PosixPath('/a')
>>> Path('/a/b').joinpath('c/d')
PosixPath('/a/b/c/d')
>>> Path('/a/b') / 'c/d'
PosixPath('/a/b/c/d')

戻り値もstrではなくPathオブジェクトになっています。

ファイルパス操作機能の統合

今まではos.pathだけでなくosglobや組み込み関数のopenなど複数のモジュールにファイル・パス操作の機能が分散していましたが、pathlibでは大部分の機能が統合されています。

pathlibのglob
Path('.').glob('*')
pathlibのopen
Path('a.txt').open('w')

また、Python3.6以降では今まで使っていたモジュールの一部も引数としてstrだけでなくPathオブジェクトを受け取れるように変更されています。

組み込み関数のopen()にPathオブジェクトを渡す
open(Path('a.txt'), 'w')

pathlibを使うメリット

ここまでの説明で「インスタンスを作成する手間が増えただけでは?」と考える人もいると思います。

しかし、pathlibが真価を発揮するのはパスの連続操作をするときです。

例として、あるファイルが格納されているディレクトリの親ディレクトリにhoge.txtというファイルが存在するかチェックする処理を比較してみましょう。

まずはos.pathを使った場合です。

os.path
>>> os.path.exists(os.path.join(os.path.dirname(os.path.dirname('/a/b/c.txt')), 'hoge.txt'))
False

関数呼び出しが入れ子になっていて、一見して何をやっているのかすぐには理解できません。

次にpathlibを使った場合です。

pathlibその1
>>> Path('/a/b/c.txt').parent.parent.joinpath('hoge.txt').exists()
False
pathlibその2
>>> (Path('/a/b/c.txt').parents[1] / 'hoge.txt').exists()
False

左から右へ自然と読めるので、とてもわかりやくすなります。

このように**pathlibではパスの連続操作がとても読みやすく(書きやすく)なります。**

pathlibは普及しているのか

自分は実務でpathlibを使ったことはまだありませんし、使われているコードを見たこともありません。

実際のところどの程度使われているのか調べてみました。

Googleトレンド

python_os_path__python_pathlib_-_調べる_-_Google_トレンド.png

検索数は増えていますがまだos.pathほどではありません。

GitHub

Codeだと日付検索ができなかったのでIssueで確認します。

os.path pathlib
2014 293 77
2015 897 181
2016 826 342
2017 463 448
※2017/07/23時点の件数

着実にpathlibが増えていて、今年はos.pathを抜きそうな勢いです。

Qiita

QiiTrendで確認してみます。

QiiTrend.png

Qiitaの記事ではpathlibはほぼ使われていないと言っていいレベルです。

GitHubとQiitaの結果から考えると、日本だけ普及が遅れているということでしょうか。

483
435
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
483
435

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?