Python 3.4 新機能 〜 pathlib編
- CreateDate : 2014-03-29
- LastUpdate : 2014-03-29
- Category : Python
本日は(第41回)Python mini Hack-a-thonの会場からお送りしております。
Python3.4がリリースされましたね!
シリーズ化を匂わせると絶対に続かないというジンクス1 にめげずに新機能を追いかけていきます。
主な見所を引用すると
- PEP 428, a pathlib module providing object-oriented filesystem paths
- PEP 435, a standardized enum module
- PEP 445, a new C API for implementing custom memory allocators
- PEP 450, a new “statistics” module
- PEP 451, standardizing module metadata for Python’s module import system
- PEP 453, a bundled installer for the pip package manager
- PEP 454, a new “tracemalloc” module for tracing Python memory allocations
- PEP 456, a new hash algorithm for Python strings and binary data
- PEP 3156, a new “asyncio” module, a new framework for asynchronous I/O
あたりでしょうか。
界隈で注目されているのは“asyncio” moduleと思われますが今回はpathlibの話。
pathlibはその名の通り「パス」に関するモジュールで、Posix/Windowsのパスそれぞれを賢く扱えるのが特徴です。
ドキュメントを見れば全部分かりますが、いくつかピックアップしてみます。
PurePath (PurePosixPath, PureWindowsPath)
PurePosixPath, PureWindowsPathはPurePathのサブクラスです。
|
1 2 3 |
from pathlib import PurePath path = PurePath('/usr', 'local', 'bin') |
これで変数pathには ‘/usr/local/bin/’ が格納されます。
|
1 2 3 |
from pathlib import PurePath path = PurePath('/usr', 'local', '/bin') |
とすると ‘/bin’ となります。
PurePath.drive
Windowsファイルシステムのドライブのパスを取り出せます。
|
1 2 3 4 |
from pathlib import PureWindowsPath path = PureWindowsPath('c:/Program Files') drive = path.drive |
driveの中身は ‘c:’ です。PurePosixPathの場合は ” になります。(あまりドライブ名が必要になるケースが思いあたらないですが。。)
PurePath.name
ファイル名を取得します。
|
1 2 3 4 5 |
from pathlib import PurePath path = PurePath('work/app/main.py') file_name = path.name |
‘main.py’ が取得出来ます。
PurePath.suffix
拡張子を取得します。
|
1 2 3 4 5 |
from pathlib import PurePath path = PurePath('work/app/main.py') extension = path.name |
‘.py’ が取得出来ます。
ただし、.tar.gz などの場合、’.gz’ のみが取得されます。PurePath.suffixesを利用すると、リスト ['.tar', '.gz'] で値を得ることができます。
PurePath.is_absolute()
絶対パスかどうかの真偽を得ます。
|
1 2 3 4 5 6 7 8 |
from pathlib import PurePath path = PurePath('work/app/main.py') if path.is_absolute(): print('絶対パスです') else: print('相対パスです') |
PurePath.with_suffix()
拡張子の差し替えが行えます。
|
1 2 3 4 5 |
from pathlib import PurePath path = PurePath('/var/data/image.jpeg') new_path = path.with_suffix('.png') |
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()
これ素敵です。ディレクトリを引数に与えると、ファイル一覧のイテレータブルなオブジェクトを返します。
|
1 2 3 4 5 6 |
from pathlib import Path path = PurePath('/var/data/') for child in path.iterdir(path): print(child) |
再帰的な探索は行われません。必要な場合はPath.globを使うと良いようです。
Linuxの簡単なファイル処理であればシェルスクリプトが手軽ですが、これくらい直感的に扱えるようになるとPython3.4でツールを作るのも楽ちんですね!
- http://librabuch.jp/2014/03/python34_new_features_pathlib/trackback/
- 前の記事 : WordPressをAWS + 網元にお引っ越ししました