LoginSignup
8
9

More than 3 years have passed since last update.

Pythonのpathlib備忘録

Last updated at Posted at 2020-04-13

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

結論

pathlib関連の情報は公式ドキュメントが一番豊富

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9