pathlibとは
Python 3.4(?)以降の標準ライブラリにある便利機能(公式ドキュメント)
os ライブラリに代替する機能を多く揃えているだけじゃなく、もうなんか、すごい奴。
色々できすぎて優秀すぎるが故、調べるのが結構手間だったりする(機能が多すぎる)
そこで個人的によく使うPath
の使い方のみ手早く記載していく。
もっと良い方法等あればコメントを頂きたく存じます。
Pathオブジェクト準備
# インポート
from pathlib import Path
# オブジェクト作成
p = Path(r"C:\Users\admin\Desktop\temp\hoge.txt")
各種情報の取得方法
# ファイル名
print(path.name) # >> hoge.txt
# ファイル名 拡張子なし
print(path.stem) # >> hoge
# 拡張子のみ取得
print(path.suffix) # >> .py
# 先頭の.がいらない場合は切り取る
print(path.suffix.lstrip(".")) # >> py
# 親階層まで
print(path.parent) # >> C:\Users\admin\Desktop\temp
# 上位階層(\..\.. を結合させてもいいけどダサいじゃん?)
print(path.parents[0]) # >> C:\Users\admin\Desktop\temp
print(path.parents[1]) # >> C:\Users\admin\Desktop
print(path.parents[2]) # >> C:\Users\admin
基本操作
# os.path.join()的な使い方
path = Path("src", "python", "naritoblog") # src/python/naritoblog
# 演算子による結合
path1 = Path("src")
path2 = Path("python")
path3 = path1 / path2 / "naritoblog" # src/python/naritoblog
# 文字列への変換
print(type(path3.__str__())) # >> str
# こっちでいい
print(type(str(path3))) # >> str
# 相対パスから絶対パスへ変換
path1 = Path("hoge.txt")
print(path1) # >> hoge.txt
print(path1.resolve()) # >> C:\Users\admin\Desktop\temp\hoge.txt
フォルダ内の一覧取得
path = Path("たいしょう")
# 全て取得
list(path.glob("*"))
# ファイルのみ
list(path.glob("*.*"))
# ディレクトリのみ
[list for list in path.iterdir() if list.is_dir()]
特定フォルダ以下全ての一覧取得
Path
オブジェクトを使えば小難しい再帰処理も必要なし!
# 以下の全て
list(path.glob("**/*"))
# 以下のファイル
list(path.glob("**/*.*"))
# 拡張子指定も可能
list(path.glob("**/*.txt"))
# ディレクトリのみ
[list for list in path.glob("**/*") if list.is_dir()]
テキストファイルの入出力
もちろん.txt
だけでなくテキストベースなら何でも。
txt_path = Path("xxx.txt")
# ファイル作成(書き出し)
with txt_path.open("w", encoding="utf-8") as file:
file.write("テスト出力")
# ファイルの読込
with txt_path.open("r", encoding="utf-8") as file:
print(file.read())
え?長ったらしい? じゃあこっち
txt_path.write_text("記述内容", encoding="utf-8") # 書き込み
src = txt_path.read_text(encoding="utf-8") # 読み込み
フォルダの作成
架空のPathオブジェクトを作成し、その存在を創造する。
make_dir = Path("mkdir")
# parents :親ディレクトリごと作成(mksirs的な)
# exist_ok:同名フォルダがいても作成できる(存在しているエラー落ちが無くなる)
make_dir.mkdir(parents=True, exist_ok=True)
# >> カレントディレクトリに「mkdir」というフォルダが作成される
ファイル、フォルダの削除
ファイル削除にリムーヴなんて言いません。時代はunlinkです。声に出したい単語
# ファイルの削除
a_txt = Path('xxx.txt')
a_txt.unlink()
# ディレクトリの削除(中身無しのみ)
rm_dir = Path('mkdir')
rm_dir.rmdir()
ファイル名・拡張子の変更
要はPath
オブジェクトのname
属性とsuffix
属性のみの変更
変更するのはPath
オブジェクトの情報であり、実態のファイルは変更しないことに注意
実態を変更したければos.rename
等を使用する(pathlibでもできるのかな?)
また似たような機能に.rename()
があるが、妙に使いにくかったので割愛
# ファイル名の変更(name属性)
path_a = Path(r"C:\temp\a_text.txt")
path_b = path_a.with_name("b_text.txt")
print(path_a) # >> C:\temp\a_text.txt
print(path_b) # >> C:\temp\b_text.txt
# 拡張子の変更(suffix属性)
path_a = Path(r"C:\temp\wich_test.txt")
path_b = path_a.with_suffix(".csv")
print(path_a) # >> C:\temp\wich_test.txt
print(path_b) # >> C:\temp\wich_test.csv
結論