2.6K Views
November 07, 22
スライド概要
Pythonの標準ライブラリpathlibについてosとの違い、どういうモジュールなのか解説したスライドです
勉強中・興味のあるもの: Python / React / DDD / TDD
pathlibのススメ osやPurePath/Pathの違いについて Yumihiki
はじめに はじめに 自己紹介 LTの内容について(何を得てもらうことができるか) pathlibとは? おわりに
自己紹介 Yumihiki / Tatsuya NIBUNO パーソルテクノロジースタッフ(株) 関西G 2020年2月〜実務未経験から転職 エセ関西人
LTの内容について(何を得てもらうことができるか) ● pathlibの概要と使い方 ○ osとの違い ● pathlibのことを知らなかった方には学びがある話 ○ 知っている人はちょっと退屈かも・・・
pathlibとは? ● ファイルシステムパスを表すクラスを提供している ● Python3.4から追加された標準ライブラリ ● PEP428で提案・採用された様子 (元々はサードパーティモジュールだった)
pathlibとは? パス操作が出来るモジュールで 標準ライブラリにos(os.path)が あるけど何がちゃうん?
pathlibとは? ● osより使いやすい・分かりやすい(個人の意見) ● os.pathは文字列操作 ● pathlibは高水準のパスオブジェクト と言われている
pathlibとは? お、おう・・・(これだけじゃよー分からん) なのでもうちょっと説明していきます
pathlibとは? ● pathlibには6つのクラスが存在する ● PurePath / PurePosixPath / PureWindowsPath ● Path / PosixPath / WindowsPath
pathlibとは? PurePath PureWindowsPath PurePosixPath Path PosixPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? PurePath PureWindowsPath PurePosixPath Path PosixPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? PurePath Pathで全てカバー できるのでPathを 使用すればOK PureWindowsPath PurePosixPath Path PosixPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? ● 純粋パス(以降、PurePath) ● I/O を伴わない純粋な計算操作を提供する = ファイルシステムのパス取得 ● 3つのアクセス方法がある(通称flavours)
pathlibとは? PurePath PureWindowsPath PurePosixPath Path PosixPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? ● PurePathは実行時にPosixかWindowsか判定して PurePosixPath / PureWindowsPath を返してくれる ● そのため3つクラスがあるが、 基本的にはPurePathを用いれば良い
pathlibとは? ● 具象パス(以降、Path) ● PurePathを継承し I/O 操作も提供する = システムコール(OS操作)を行う ● PurePathと同じく3つのアクセス方法がある
pathlibとは? PurePath PureWindowsPath PurePosixPath Path PosixPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? ● Path / PosixPath / WindowsPath の3つが存在する ● 使用者としてはPathを利用すれば良い ○ PurePath同様、環境を判定してくれるので
pathlibとは? ● そしてpathlib全体の話としては PurePath / Path で区別せず 基本的にはPathを用いれば良い ○ PathはPurePathのサブクラスなので
pathlibとは? 前置きが長くなったけど 語るよりコードを見てもらった方が良いですよね😆
pathlibとは? 🔴🟠🟢 実行環境 macOS Big Sur バージョン 11.6.4 Python3.10.5 ターミナル を使用(pythonコマンドで対話環境を呼出)
pathlibとは? 🔴🟠🟢 >>> from pathlib import Path >>> p = Path("/Users/yumihiki/module_pathlib.py") >>> p PosixPath('/Users/yumihiki/module_pathlib.py') # 利用環境がMacなので、PosixPathになっていることがわかる
pathlibとは? 🔴🟠🟢 >>> p.name 'module_pathlib.py' >>> p.stem 'module_pathlib' >>> p.suffix '.py'
pathlibとは? 一方、os.pathモジュールを利用した場合・・・ (import os した前提で以降記述)
pathlibとは? 🔴🟠🟢 >>> os.path.basename("/Users/yumihiki/module_pathlib.py") 'module_pathlib.py' >>> os.path.splitext( os.path.split("/Users/yumihiki/module_pathlib.py")[1] )[0] 'module_pathlib' >>> os.path.splitext("/Users/yumihiki/module_pathlib.py")[1] '.py'
pathlibとは? ちょっと可読性に欠ける気がする😔
pathlibとは? そのほかPathでIO操作をしてみる😎
pathlibとは? 🔴🟠🟢 >>> p0 = Path("/Users/yumihiki/study") >>> p0.mkdir() # ディレクトリ作成 >>> p1 = Path("/Users/yumihiki/study/pathlib_study.py") >>> p1.touch() # ファイル作成 >>> p1.unlink() # ファイル削除
pathlibとは? osの場合・・・ (正確にはファイルの作成はosは用いられない)
pathlibとは? 🔴🟠🟢 >>> os.mkdir("/Users/yumihiki/study") >>> with open("/Users/yumihiki/study/pathlib_study.py") as f: ... f.write("") … 0 >>> os.remove("/Users/yumihiki/study/pathlib_study.py")
pathlibとは? ファイル名取得の時と比べるとまだ分かりやすいけど それでもpathlibの方がより分かりやすい・使いやすそう!
pathlibとは? 公式リファレンスに os と pathlib の対応表がある! 「これどうしたら良い?」っていう時に便利です!
おわりに 個人的にはos.pathよりも直感的に分かりやすく 使えるところが好きです😻
おわりに PathをimportしたのにPurePathも利用していたなと ソースを思い出しました・・・😱
おわりに Python2系から移行されたソースを参考にして pathlibを使えるけど使っていなかった・・・という ケースもあると思うのでぜひ活用してみてください!
おわりに ご静聴ありがとうございました!