Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pathlibのススメ
Search
Yumihiki
November 07, 2022
Programming
0
43
pathlibのススメ
Pythonの標準ライブラリのpathlibについて解説したスライドです。
osモジュールとは何が違うのか、どう便利なのかちょっと解説したスライドになります。
Yumihiki
November 07, 2022
Tweet
Share
More Decks by Yumihiki
See All by Yumihiki
ノリと勢いで勉強会を共同主催しはじめた話
nibuno
1
330
LTってなんなん?
nibuno
0
120
【初心者向け】ググらずに!? ターミナル上で Pythonオブジェクトを調べよう
nibuno
0
470
勇気出してアウトプットしたらコメントをもらえて自分の理解が深まった良い話🤩
nibuno
0
170
テスト駆動開発のススメ
nibuno
2
21k
目標を決めるにあたって 新年の抱負 超LT会- vol.2
nibuno
0
360
パーフェクトPHPのススメ
nibuno
1
1k
Other Decks in Programming
See All in Programming
Better Code Design in PHP
afilina
PRO
0
120
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
290
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
4
640
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
120
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
120
距離関数を極める! / SESSIONS 2024
gam0022
0
280
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
2
670
Jakarta EE meets AI
ivargrimstad
0
540
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Designing Experiences People Love
moore
138
23k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
860
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
How STYLIGHT went responsive
nonsquared
95
5.2k
KATA
mclloyd
29
14k
Transcript
Yumihiki pathlibのススメ osやPurePath/Pathの違いについて
はじめに はじめに 自己紹介 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とは? Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath Pathで全てカバー できるのでPathを 使用すればOK
https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
pathlibとは? • 純粋パス(以降、PurePath) • I/O を伴わない純粋な計算操作を提供する = ファイルシステムのパス取得 •
3つのアクセス方法がある(通称flavours)
pathlibとは? Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより
• PurePathは実行時にPosixかWindowsか判定して PurePosixPath / PureWindowsPath を返してくれる • そのため3つクラスがあるが、 基本的にはPurePathを用いれば良い pathlibとは?
pathlibとは? • 具象パス(以降、Path) • PurePathを継承し I/O 操作も提供する = システムコール(OS操作)を行う •
PurePathと同じく3つのアクセス方法がある
pathlibとは? Path PosixPath PurePath PurePosixPath PureWindowsPath 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を使えるけど使っていなかった・・・という ケースもあると思うのでぜひ活用してみてください!
おわりに ご静聴ありがとうございました!