【python】pathlibを使ったパス操作まとめ

pathlibを使ったパス操作のまとめです。

Python 3.7.2

ファイル操作

ファイル操作まとめ。

#coding:utf-8
import pathlib

# インスタンス化
file1 = pathlib.Path('Example/Example\example.txt') # セパレータは\でも/でも混ぜてもok

# 存在してるか
print(file1.exists())

# 新規作成
file1.touch()  # 既に存在してもエラーにはならない
file1.touch(exist_ok=False)  # 存在していたらエラー

# フォルダを作って新規生成
file1.parent.mkdir(parents=True, exist_ok=True)
file1.touch()

# ファイルを読み込む
with file1.open() as f:
    print(f.read())
    
# ファイルを一行ずつ読み込む
with file1.open() as f:
    print(f.readline())
    print(f.readline())
    print(f.readline())
    
# ファイルを読み込んで一行ずつのリストにしたものを取得(要素には改行コードが含まれる)
with file1.open() as f:
    print(f.readlines())

# ファイルを上書き
with file1.open(mode="w") as f:
    f.write("example\n2行目")  # ファイルが無ければ新規作成 / フォルダが無いとエラー

# リストをつなげて上書き
with file1.open(mode="w") as f:
    f.writelines(["1行目\n", "2行目前半", "2行目後半"])

# ファイルが存在しないときだけ書き込む
try:
    with file1.open(mode="x") as f:
        f.write("example")  # ファイルが存在したらエラー
except FileExistsError:
    pass

# 追記モードで書き込む
with file1.open(mode="a") as f:
    f.write("\nexample")  # ファイルが無ければ新規作成
    
# openを書かなくても読み込めるメソッド
file1.read_text()  # ファイルが無ければエラー

# openを書かなくても書き込めるメソッド
file1.write_text("example")  # ファイルが無ければ新規作成 / フォルダが無いとエラー

# 削除
file1.unlink()  # ファイルが無ければエラー

フォルダ操作

フォルダ操作まとめ。

#coding:utf-8
import pathlib

# インスタンス化
folder1 = pathlib.Path('Example/Example2\Example3') # 末尾にセパレータがあってもok

# フォルダか
print(folder1.is_dir())

# 存在してるか
print(folder1.exists())

# 新規作成
folder1.mkdir()  # 未作成の中間フォルダがあったらエラー / 既に存在していたらエラー
folder1.mkdir(parents=True, exist_ok=True)  # 中間フォルダもまとめて作成
folder1.mkdir(exist_ok=True)  # 存在していてもエラーにならない(フォルダの中身もそのまま)
folder1.mkdir(parents=True, exist_ok=True)  # 大体のケースではこれが使い勝手良さげ

# 空フォルダを削除
#folder1.rmdir()  # 中身があるとエラー / なかったらエラー

# フォルダの中身ごと削除するにはshutilを使う
import shutil
shutil.rmtree(folder1)  # 無かったらエラー

# すべてのファイルを取得
for item in folder1.iterdir():
    print(item)
lst = list(folder1.iterdir())  # イテレータをリスト化

# 再帰的に(サブフォルダも含めて)すべてのファイルを取得
items = folder1.glob("**") # 全てのフォルダを再帰的に取得
items = folder1.glob("**/*") # 全てのファイルとフォルダを再帰的に取得
items = folder1.glob("**/*.txt") # 特定拡張子のファイルを再帰的に取得 
for item in items:
    print(item)

Pathオブジェクトに対する操作

Pathオブジェクトに対する操作まとめ。

# 絶対パスに変換
fullpath = file1.resolve()

# 相対パスに変換
path = path.relative_to(pathlib.Path.cwd())

# 文字列に変換
string = str(file1)

# ファイル名(拡張子付き)/ フォルダ名のみ抽出
file.name

# ファイル名(拡張子なし)/ フォルダ名のみ抽出
file.stem

# 拡張子を取得
file.suffix

# 親フォルダのパスを取得
file.parent

# 同じフォルダの別のファイルを取得
file.with_name("other.txt")

# 拡張子を変更
file.with_suffix(".png")

# パスは/で結合する
path = pathlib.Path('Example/Example2/') / pathlib.Path("example.txt")
path = pathlib.Path('Example/Example2/') / "example.txt"  # こんな感じでもできる

参考

note.nkmk.me

note.nkmk.me

note.nkmk.me

note.nkmk.me

note.nkmk.me https://note.nkmk.me/python-pathlib-us