Python rglob("*") 与 glob("*)

Python rglob("*") vs glob("*)

我正在尝试将一堆名称中带有“V1.2”的文件移动到存档文件夹中。它似乎适用于以下代码:

for folder in copyPath.glob("*"):
    for subfolder in folder.glob("*"):
        for content in subfolder.glob("*"):
            if "V1.2" in content.name:
                shutil.move(content ,Path(subfolder,"Archive"))

然而,以下带有 rglob("*V1.2*")、python 的代码只是在存档文件夹中创建了一个名为“Archive”的无扩展文件。这是为什么?

for file in copyPath.rglob("*V1.2*"):
    shutil.move(file,Path(file.parent,"Archive"))

此致, 作为

您声明以下代码在存档文件夹中创建了一个名为“Archive”的文件:

for file in copyPath.rglob("*V1.2*"):
    shutil.move(file,Path(file.parent,"Archive"))

shutil.move 仅在目录已存在的情况下将您的文件移动到该目录中。否则,它将移动(重命名)您的 文件。我猜 Path(file.parent, "Archive") 不是目录,所以每个符合条件的文件都被移动到一个名为“存档”的文件中,每个文件覆盖前一个文件。

修复应该很简单:

for file in copyPath.rglob("*V1.2*"):
    target = Path(file.parent, "Archive")
    if target.is_file():
        raise ValueError(f"Invalid directory: {target} is a file!")  # safety check to avoid overwriting files and data loss

    if not target.is_dir():
        target.mkdir(parents=True)  # <- this should solve your problem

    shutil.move(file, target)