はじめに
こんにちは、株式会社フォトラクションでPMをしている峠です。
業務でディレクトリやファイル操作でパスを扱うことが多く、これらを Pathlib
と呼ばれるPythonのライブラリを用いて操作しています。
今回はPathlibでできる操作をいくつか紹介したいと思います。
Pythonではパス操作時にos
などのライブラリを使うことが一般的なイメージがありますが、弊社ではPathlib
を使用しています。(参考:pathlibドキュメント)
1. 基本パス操作
from pathlib import Path # Pathインスタンスを作成 path = Path() """カレントパスを取得""" current_path = path.cwd() print(current_path) => "/content" """パスの連結""" # ①「/」で連結 dir1_path = current_path / 'dir1' file1_path = dir1_path / 'file1.txt' print(dir1_path) => "/content/dir1" print(file1_path) => "/content/dir1/file1.txt" # ②「joinpath()」で連結 dir2_path = current_path.joinpath('dir2') file2_path = dir2_path.joinpath('file2.txt') print(dir2_path) => "/content/dir2" print(file2_path) => "/content/dir2/file2.txt" """ディレクトリの判定""" dir1_is_dir = dir1_path.is_dir() file1_is_dir = file1_path.is_dir() print(dir1_is_dir) => "True" print(file1_is_dir) => "False" """ファイルの判定""" dir1_is_file = dir1_path.is_file() file1_is_file = file1_path.is_file() print(dir1_is_file) => "False" print(file1_is_file) => "True" """ディレクトリの作成""" # parents=True:中間ディレクトリも含めて作成する # exist_ok=True:既存のディレクトリが指定されていてもエラーを出力しない dir1_path.mkdir(exist_ok=True,parents=True) """ファイルの作成""" # exist_ok=True:既存のディレクトリが指定されていてもエラーを出力しない file1_path.touch(exist_ok=True) """パスの存在を確認""" dir1_exist = dir1_path.exists() file1_exist = file1_path.exists() print(dir1_exist) => "True" print(file1_exist) => "True" dir2_exist = dir2_path.exists() file2_exist = file2_path.exists() print(dir2_exist) => "False" print(file2_exist) => "False"
2. ディレクトリ・ファイルの操作
"""ディレクトリ・ファイルの名前を取得""" dir1_name = dir1_path.name file1_name = file1_path.name print(dir1_name) => "dir1" print(file1_name) => "file1.txt" """ディレクトリ・ファイルの拡張子を除いた名前を取得""" dir1_stem = dir1_path.stem file1_stem = file1_path.stem print(dir1_stem) => "dir1" print(file1_stem) => "file1" """ディレクトリ・ファイルの拡張子を取得(なければ取得しない)""" dir1_suffix = dir1_path.suffix file1_suffix = file1_path.suffix print(dir1_suffix) => "" print(file1_suffix) => ".txt" """パスを文字列としてを取得""" dir1_str = str(dir1_path) file1_str = str(file1_path) print(dir1_str) => "/content/dir1" print(file1_str) => "/content/dir1/file1.txt"
3. ディレクトリ・ファイル一覧の取得
# dir1に追加でディレクトリ・ファイルを作成 dir1_path.joinpath('file2.txt').touch(exist_ok=True) dir1_path.joinpath('dir1-1').mkdir(exist_ok=True) dir1_path.joinpath('dir1-2').mkdir(exist_ok=True) """ディレクトリ・ファイルの一覧をリストで取得""" path_list = [path for path in dir1_path.iterdir()] print(path_list) => "[PosixPath('/content/dir1/file2.txt')," "PosixPath('/content/dir1/dir1-2'), " "PosixPath('/content/dir1/file1.txt')," "PosixPath('/content/dir1/dir1-1')]" """ディレクトリの一覧をリストで取得""" dir_list = [path for path in dir1_path.iterdir() if path.is_dir()] print(dir_list) => "[PosixPath('/content/dir1/dir1-2')," "PosixPath('/content/dir1/dir1-1')]" """ファイルの一覧をリストで取得""" file_list = [path for path in dir1_path.iterdir() if path.is_file()] print(file_list) => "[PosixPath('/content/dir1/file2.txt')," " PosixPath('/content/dir1/file1.txt')]"
最後に
Pathlib
はファイル操作機能が豊富で使い方も感覚的なのでとても便利です。
よかったら使ってみてください。
参考
pathlib - Object-oriented filesystem paths
株式会社フォトラクションでは一緒に働く仲間を募集しています