pathlib でファイルとフォルダの パス作成 ⇒ 存在確認 ⇒ 作成 ⇒ 削除 を行うコード例【Python】

Pythonパイソンpathlibパスリブ モジュールで パス作成 ⇒ 存在確認そんざいかくにん実体作成じったいさくせい削除さくじょ を行うコード例です。

それから、解説です。『どうやって元のパスを取得するのか?⇒ str(p)』とか、『既存の Pathパス から新しい Pathパス を作る方法 ⇒ Path(p), p.joinpath()』などを書きました。

パス文字列を pathlib で扱うアプローチは、とても良かったです。

従来の osオーエス モジュールを使うよりも、コードが短く、簡単に書けました。

ここでは

  • 新しく Pathパス を作る。
  • フォルダ (folder) の存在確認をしてから、フォルダを作る。削除する。
  • Pathパス から新しい Pathパス を作る。
  • ファイル (file) の存在確認をしてから、ファイルを作る。削除する。

の『コード例』と『解説』を紹介します。

スポンサーリンク

pathlib のコード例

pathlibパスリブ モジュールから Pathパス をインポートして使っています。

実行すると、指定した場所にフォルダを作り、ファイルを作り、最後に削除します。

ところで、print() の中で使っている f'{変数}' は、『フォーマット済み文字列リテラル』とか『f-string』と呼ばれるものです。テキストの中に、変数を自然に埋め込むことができるので、とても便利なのです。

Python マニュアル
フォーマット済み文字列リテラル
(Python 3.6 から使用可能)

from pathlib import Path

def main():
    """メイン関数"""

    print('Start\n')


    # 新しく『フォルダ』を作りたい!

    # (1/5) フォルダパスのインスタンスを作る
    data_dir = Path(r'F:\apps\data')
    print(f'{data_dir}: data_dir')

    # (2/5) パスを取得するときは str() に渡す。
    t = str(data_dir)
    print(f'{t}: str(data_dir)\n')

    # (3/5) フォルダが無ければ作る。
    if not data_dir.is_dir():
        print(f'フォルダが存在しない: {str(data_dir)}\n')

        # (4/5) フォルダを作成。
        data_dir.mkdir()
        print(f'フォルダを作成: {str(data_dir)}\n')

        # (5/5) フォルダの存在を確認する。
        print(f'フォルダはある?: {data_dir.is_dir()}\n')



    # 新しく『テキストファイル』を作りたい!

    # (1/5) ファイルパスのインスタンスを作る。
    text_file = data_dir.joinpath('memo.txt')
    print(f'{text_file}: text_file\n')

    # (2/5) ファイルが無ければ作る。
    if not text_file.is_file():
        print(f'ファイルが存在しない: {str(text_file)}\n')

        # (3/5) ファイルを作成。
        text_w = f'ファイル名は {text_file.name}'
        with text_file.open('w', encoding='utf-8') as fw:
            fw.write(text_w)
        print(f'ファイルを作成: {str(text_file)}\n')

        # (4/5) ファイルの存在を確認する。
        print(f'ファイルはある?: {text_file.is_file()}\n')

    # (5/5) ファイルを読み込む。
    with text_file.open('r', encoding='utf-8') as fr:
        text_r = fr.read()
    print(f'ファイルの内容: {text_r}\n')



    # 『テキストファイル』を削除したい!

    # (1/2) ファイルを削除する。アンリンク
    text_file.unlink()
    print(f'ファイルを削除した: {str(text_file)}\n')

    # (2/2) ファイルの存在を確認する。
    print(f'ファイルはある?: {text_file.is_file()}\n')



    # 『フォルダ』を削除したい!

    # (1/2) フォルダを削除する。
    data_dir.rmdir()
    print(f'フォルダを削除した: {str(text_file)}\n')

    # (2/2) フォルダの存在を確認する。
    print(f'フォルダはある?: {data_dir.is_dir()}\n')


    print('End')
    return

if __name__ == '__main__':
    main()

実行結果

pathlibパスリブ のコード例の実行結果です。

Visual Studio Code でステップ実行しながら、実際にエクスプローラーでフォルダの場所を見ていたら、確かにフォルダができて、ファイルができて、最後に削除されていました。

Start

F:\apps\data: data_dir
F:\apps\data: str(data_dir)

フォルダが存在しない: F:\apps\data

フォルダを作成: F:\apps\data

フォルダはある?: True

F:\apps\data\memo.txt: text_file

ファイルが存在しない: F:\apps\data\memo.txt

ファイルを作成: F:\apps\data\memo.txt

ファイルはある?: True

ファイルの内容: ファイル名は memo.txt

ファイルを削除した: F:\apps\data\memo.txt

ファイルはある?: False

フォルダを削除した: F:\apps\data\memo.txt

フォルダはある?: False

End

pathlib の解説

コード例で使用した pathlibパスリブ の機能の解説です。

Path() で新しいパスを作る

今まで r'F:\apps\data' のように書いていたところに、Path() を使います。

p = Path(r'F:\apps\data')

これで、p に続けてドット (.) を打つだけで、ファイル名を取り出したり、拡張子かくちょうしを取り出したり、存在確認をしたり、色々なことができるようになりました。

Python マニュアル
class pathlib.Path(*pathsegments)

従来は、os.path.basename(p) とか、os.path.splitext(p)[1] とか、かなり長いコードを書く必要がありました。

それが、p.name()、p.suffixサフィックス() で済むようになりました。

とても便利になりました。なので、新しいプログラムでは pathlib をメインで使うようになりました。

ほかにも、名前空間で os や os.path にある関数名が消費されないところも好きです。

元のパス文字列を取得する方法 ⇒ str(p)

p = Path('パス文字列')と書いた時の『パス文字列』は、組み込み関数の str() で取得できました。

"""Path のインスタンスから元のパス文字列を取得するコード例"""
from pathlib import Path

p = Path(r'F:\apps\data')
t = str(p)
print(t)

実行結果です。

F:\apps\data

Python マニュアル
pathlib — オブジェクト指向のファイルシステムパス
純粋パス 演算子 str(p)

組み込み型
class str(object='')

Path から新しい Path を作る方法

既存きぞんの Path インスタンスから新しい Path を作る方法です。

Path() に『既存の Path インスタンス』を渡したり、p.joinpath() を使うことで、新しい Path を作ることが出来ました。

独立かいなかの確認方法です。組み込み関数の idアイディー() 関数を使いました。

Python マニュアル
組み込み関数 id(object)

id(p) の数値がちがっていれば、独立したインスタンスだと分かります。

Path() に『既存の Path インスタンス』を渡す

Path() に『既存の Path インスタンス』を渡したら、パス文字列が同じで、独立どくりつした Path インスタンスができました。

"""既存の Path インスタンスから新しい Path インスタンスを作るコード例"""
from pathlib import Path

p = Path(r'F:\apps\data')
new_p = Path(p)

print(f'{id(p)} ← id(p) {p}')
print(f'{id(new_p)} ← id(new_p) {new_p}')

実行結果です。※ id() の数値は、実行するたびに変わります。

42605704 ← id(p) F:\apps\data
42605816 ← id(new_p) F:\apps\data

期待したとおり、値が違っています。

新しい Path インスタンスが出来ていました。

p.joinpath() を使う

たとえば、p.joinpath() に追加のパスを渡すと、新しい Path インスタンスが返りました。

Python マニュアル
PurePath.joinpath(*other)

"""p.joinpath() で新しい Path インスタンスを作るコード例"""
from pathlib import Path

p = Path(r'F:\apps\data')
new_p = p.joinpath('memo.txt')

print(f'{id(p)} ← id(p) {p}')
print(f'{id(new_p)} ← id(new_p) {new_p}')

実行結果です。※ id() の数値は、実行するたびに変わります。

42995048 ← id(p) F:\apps\data
42995160 ← id(new_p) F:\apps\data\memo.txt

期待したとおり、値が違っています。

新しい Path インスタンスが出来ていました。

フォルダ (folder) の存在確認 ⇒ p.is_dir()

p.is_dir() は、os.path.isdir() にあたるメソッドです。

Python マニュアル
Path.is_dir()

is_dir() は、YouTube で『イズ ディーアイアー』と読んでいる方がいました。流して読むときは『イズ ダー』って読んでいました。

フォルダの作成方法 ⇒ p.mkdir()

p.mkdir() は、os.mkdir() にあたるメソッドです。

Python マニュアル
Path.mkdir(mode=0o777, parents=False, exist_ok=False)

mkdir() は、YouTube で『エムケー ディーアイアー』と読んでいる方がいました。流して読むときは『エムケー ダー』って読んでいました。

ファイル (file) の存在確認 ⇒ p.is_file()

p.is_file() は、os.path.isfile() にあたるメソッドです。

Python マニュアル
Path.is_file()

is_file() は、YouTube で『イズ ファイル』と読んでいる方がいました。

テキストファイルへの書込と読込 ⇒ p.open()

p.open() は、組み込み関数の open() にあたるメソッドです。

p.open('w', encoding='utf-8') # 書き込みモード
p.open('r', encoding='utf-8') # 読み込みモード

Python マニュアル
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)

ファイルを削除する方法 ⇒ p.unlink() アンリンク

p.unlink() は、os.remove() と os.unlink() にあたるメソッドです。

Python マニュアル
Path.unlink()

unlink() は、YouTube で『アンリンク』と読んでいる方がいました。

自分としては、ファイルを消すって、delディイーエル とか deleteデリート のイメージだったんですが、os.unlink() の説明を読んだら、Python は Unixユニックス で昔から使われている名前に合わせた、みたいでした。

フォルダを削除する方法 ⇒ p.rmdir()

p.rmdir() は、os.rmdir() にあたるメソッドです。

フォルダを削除するときは、フォルダの中身を空っぽにしておく必要があるとのことでした。

Python マニュアル
Path.rmdir()

rmdir() は、YouTube で『アールエム ディーアイアー』と読んでいる方がいました。流して読むときは『アールエム ダー』って読んでいました。

pathlib.Path インスタンスのキャプチャ画像

pathlib.Path インスタンスのキャプチャ画像です。参考用に撮りました。

Visual Studio Code の WATCHウォッチ ウィンドウのところの画像になります。

タイトルとURLをコピーしました