Slide 1

Slide 1 text

Yumihiki pathlibのススメ
 
 osやPurePath/Pathの違いについて


Slide 2

Slide 2 text

はじめに
 はじめに
 自己紹介
 LTの内容について(何を得てもらうことができるか)
 pathlibとは?
 おわりに


Slide 3

Slide 3 text

自己紹介
 Yumihiki / Tatsuya NIBUNO
 パーソルテクノロジースタッフ(株) 関西G
 2020年2月〜実務未経験から転職
 エセ関西人


Slide 4

Slide 4 text

LTの内容について(何を得てもらうことができるか)
 ● pathlibの概要と使い方
 ○ osとの違い
 ● pathlibのことを知らなかった方には学びがある話󰢛
 ○ 知っている人はちょっと退屈かも・・・
 


Slide 5

Slide 5 text

pathlibとは?
 ● ファイルシステムパスを表すクラスを提供している
 ● Python3.4から追加された標準ライブラリ
 ● PEP428で提案・採用された様子
 (元々はサードパーティモジュールだった)
 


Slide 6

Slide 6 text

pathlibとは?
 パス操作が出来るモジュールで
 標準ライブラリにos(os.path)が
 あるけど何がちゃうん?


Slide 7

Slide 7 text

pathlibとは?
 ● osより使いやすい・分かりやすい(個人の意見)
 ● os.pathは文字列操作
 ● pathlibは高水準のパスオブジェクト
 と言われている


Slide 8

Slide 8 text

pathlibとは?
 お、おう・・・(これだけじゃよー分からん)
 なのでもうちょっと説明していきます


Slide 9

Slide 9 text

pathlibとは?
 ● pathlibには6つのクラスが存在する
 ● PurePath / PurePosixPath / PureWindowsPath
 ● Path / PosixPath / WindowsPath


Slide 10

Slide 10 text

pathlibとは?
 Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより

Slide 11

Slide 11 text

pathlibとは?
 Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより

Slide 12

Slide 12 text

pathlibとは?
 Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath Pathで全てカバー
 できるのでPathを
 使用すればOK
 https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより

Slide 13

Slide 13 text

pathlibとは?
 ● 純粋パス(以降、PurePath)
 ● I/O を伴わない純粋な計算操作を提供する 
 = ファイルシステムのパス取得
 ● 3つのアクセス方法がある(通称flavours)


Slide 14

Slide 14 text

pathlibとは?
 Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより

Slide 15

Slide 15 text

● PurePathは実行時にPosixかWindowsか判定して
 PurePosixPath / PureWindowsPath を返してくれる
 ● そのため3つクラスがあるが、
 基本的にはPurePathを用いれば良い
 pathlibとは?


Slide 16

Slide 16 text

pathlibとは?
 ● 具象パス(以降、Path)
 ● PurePathを継承し I/O 操作も提供する
 = システムコール(OS操作)を行う
 ● PurePathと同じく3つのアクセス方法がある


Slide 17

Slide 17 text

pathlibとは?
 Path PosixPath PurePath PurePosixPath PureWindowsPath WindowsPath https://docs.python.org/ja/3/library/pathlib.html#module-pathlib のイラストより

Slide 18

Slide 18 text

pathlibとは?
 ● Path / PosixPath / WindowsPath の3つが存在する
 ● 使用者としてはPathを利用すれば良い
 ○ PurePath同様、環境を判定してくれるので


Slide 19

Slide 19 text

pathlibとは?
 ● そしてpathlib全体の話としては
 PurePath / Path で区別せず
 基本的にはPathを用いれば良い
 ○ PathはPurePathのサブクラスなので


Slide 20

Slide 20 text

pathlibとは?
 前置きが長くなったけど
 語るよりコードを見てもらった方が良いですよね😆


Slide 21

Slide 21 text

pathlibとは?
 実行環境 
 macOS Big Sur バージョン 11.6.4
 Python3.10.5
 ターミナル を使用(pythonコマンドで対話環境を呼出)
 🔴 🟠 🟢

Slide 22

Slide 22 text

pathlibとは?
 >>> from pathlib import Path
 >>> p = Path("/Users/yumihiki/module_pathlib.py")
 >>> p
 PosixPath('/Users/yumihiki/module_pathlib.py')
 # 利用環境がMacなので、PosixPathになっていることがわかる
 🔴 🟠 🟢

Slide 23

Slide 23 text

pathlibとは?
 >>> p.name
 'module_pathlib.py'
 
 >>> p.stem
 'module_pathlib'
 
 >>> p.suffix
 '.py'
 🔴 🟠 🟢

Slide 24

Slide 24 text

pathlibとは?
 一方、os.pathモジュールを利用した場合・・・
 (import os した前提で以降記述)


Slide 25

Slide 25 text

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'
 🔴 🟠 🟢

Slide 26

Slide 26 text

pathlibとは?
 ちょっと可読性に欠ける気がする😔


Slide 27

Slide 27 text

pathlibとは?
 そのほかPathでIO操作をしてみる😎


Slide 28

Slide 28 text

pathlibとは?
 >>> p0 = Path("/Users/yumihiki/study")
 >>> p0.mkdir() # ディレクトリ作成
 
 >>> p1 = Path("/Users/yumihiki/study/pathlib_study.py")
 >>> p1.touch() # ファイル作成
 
 >>> p1.unlink() # ファイル削除
 🔴 🟠 🟢

Slide 29

Slide 29 text

pathlibとは?
 osの場合・・・
 (正確にはファイルの作成はosは用いられない)
 


Slide 30

Slide 30 text

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")
 🔴 🟠 🟢

Slide 31

Slide 31 text

pathlibとは?
 ファイル名取得の時と比べるとまだ分かりやすいけど
 それでもpathlibの方がより分かりやすい・使いやすそう!


Slide 32

Slide 32 text

pathlibとは?
 公式リファレンスに os と pathlib の対応表がある!
 「これどうしたら良い?」っていう時に便利です!


Slide 33

Slide 33 text

おわりに
 個人的にはos.pathよりも直感的に分かりやすく
 使えるところが好きです😻


Slide 34

Slide 34 text

おわりに
 PathをimportしたのにPurePathも利用していたなと
 ソースを思い出しました・・・😱


Slide 35

Slide 35 text

おわりに
 Python2系から移行されたソースを参考にして
 pathlibを使えるけど使っていなかった・・・という
 ケースもあると思うのでぜひ活用してみてください!


Slide 36

Slide 36 text

おわりに
 ご静聴ありがとうございました!