Python 3.4 新機能 〜 pathlib編

本日は(第41回)Python mini Hack-a-thonの会場からお送りしております。

Python3.4がリリースされましたね!

シリーズ化を匂わせると絶対に続かないというジンクス1 にめげずに新機能を追いかけていきます。

主な見所を引用すると

あたりでしょうか。

界隈で注目されているのは“asyncio” moduleと思われますが今回はpathlibの話。

pathlibはその名の通り「パス」に関するモジュールで、Posix/Windowsのパスそれぞれを賢く扱えるのが特徴です。

ドキュメントを見れば全部分かりますが、いくつかピックアップしてみます。

PurePath (PurePosixPath, PureWindowsPath)

PurePosixPath, PureWindowsPathはPurePathのサブクラスです。

これで変数pathには ‘/usr/local/bin/’ が格納されます。

とすると ‘/bin’ となります。

PurePath.drive

Windowsファイルシステムのドライブのパスを取り出せます。

driveの中身は ‘c:’ です。PurePosixPathの場合は ” になります。(あまりドライブ名が必要になるケースが思いあたらないですが。。)

PurePath.name

ファイル名を取得します。

‘main.py’ が取得出来ます。

PurePath.suffix

拡張子を取得します。

‘.py’ が取得出来ます。

ただし、.tar.gz などの場合、’.gz’ のみが取得されます。PurePath.suffixesを利用すると、リスト ['.tar', '.gz'] で値を得ることができます。

PurePath.is_absolute()

絶対パスかどうかの真偽を得ます。

PurePath.with_suffix()

拡張子の差し替えが行えます。

new_pathには ‘/var/data/image.png’ が得られます。ファイルフォーマットのコンバートや圧縮時に重宝しそうです。

Path

PathはPurePathのサブクラスでファイル・ディレクトリに対する様々な処理が行えます。

Path.cwd()

Current Directoryを返します。

Linuxのpwdコマンド、os moduleのgetcwd()と同じです。

Path.is_dir(), Path.is_file(), Path.is_sysmlink()

名前の通り。それぞれ真偽を返します。

Path.iterdir()

これ素敵です。ディレクトリを引数に与えると、ファイル一覧のイテレータブルなオブジェクトを返します。

再帰的な探索は行われません。必要な場合はPath.globを使うと良いようです。

Linuxの簡単なファイル処理であればシェルスクリプトが手軽ですが、これくらい直感的に扱えるようになるとPython3.4でツールを作るのも楽ちんですね!


  1. LNMPネタとか。 

  • http://librabuch.jp/2014/03/python34_new_features_pathlib/trackback/