web-dev-qa-db-ja.com

PathLibは再帰的にディレクトリを削除しますか?

ディレクトリとPathLibモジュールのコンテンツを削除する方法はありますか? path.unlink()では、ファイルを削除するだけです。path.rmdir()では、ディレクトリは空でなければなりません。 1回の関数呼び出しでそれを行う方法はありませんか?

15
Jasonca1

既にご存知のように、ファイル/ディレクトリを削除するための2つのPathメソッドは.unlink().rmdir()のみであり、どちらも必要なことを行いません。

Pathlibは、異なるOS間でオブジェクト指向のパスを提供するモジュールであり、多種多様なメソッドを持つことを意図したものではありません。

このライブラリの目的は、ファイルシステムのパスとユーザーがそれらに対して行う一般的な操作を処理するクラスの単純な階層を提供することです。

ディレクトリを再帰的に削除するなど、「一般的でない」ファイルシステムの変更は、異なるモジュールに保存されます。ディレクトリを再帰的に削除する場合は、shutilモジュールを使用する必要があります。 (Pathインスタンスでも動作します!)

import shutil
import pathlib
import os  # for checking results

print(os.listdir())
# ["a_directory", "foo.py", ...]

path = pathlib.Path("a_directory")

shutil.rmtree(path)
print(os.listdir())
# ["foo.py", ...]
29
abccd

サードパーティのライブラリを使用しても構わない場合は、 path.py を試してください。そのAPIは _pathlib.Path_ と似ていますが、ディレクトリツリーを再帰的に削除する Path.rmtree() などの追加のメソッドを提供します。

4
AXO

それ以外の場合、pathlibのみが必要な場合はこれを試すことができます。

from pathlib import Path, os


def rm_tree(pth: Path):
    for f in os.listdir(pth):
        child = pth / f
        if child.is_file():
            child.unlink()
        else:
            rm_tree(child)
    pth.rmdir()

rm_tree(your_path)
0
Rami