当我使用 shutil.move() 时,它会删除一个文件夹

When I use shutil.move() it deletes one folder

我在另一个文件中托管了一系列文件。这些文件涉及各种烹饪菜肴,并保存在名为 'cocina' 的文件中。我附上图片:

我想做的是将所有名称为“carnes-meat_type”的文件移动到另一个文件夹,托管在同一个地方,名为 'carnes'。但是,当我使用 shutil.move 时,我不知道为什么名称为“carnes-anade”的文件消失了,只出现了这个文件的内容。我加一张图方便大家理解:

正如您在图片中看到的,该文件(我称之为 'carnes')包含涉及肉类类型的所有文件夹和两个 .txt 文件。这两个文件是“carnes-anade”文件夹中的文件,我不明白为什么这个文件夹消失了,只剩下它的文件,而我唯一做的就是移动文件夹。

我添加我用过的代码:

import re
import os
import shutil

for root, dirs, files in os.walk(root_path):
    for dire in dirs:
        if re.findall(r'carnes-', dire):
            shutil.move(os.path.join(root_path, dire),
                            os.path.join(root_path, 'carnes'))

这里的“root_path”指的是主文件夹,也就是'cocina',是其他菜品文件夹所在的地方。我所做的是通过 re.findall() 函数搜索所有具有字符串“carnes-”的文件,并将它们移动到“carnes”文件夹,该文件夹是在我 运行 代码后直接创建的.

有人知道会发生什么吗?

提前致谢。

看看shutil.move documentation

当您尝试将 /a 移动到 /b 之前 /b 存在时,/a 只是重命名为 /b。之后,/c 将移动到 /b

一个简单的解决方法是确保目标目录存在,然后再将其他目录移入其中。


示例:

之前

cocina
    ├── arroces
    ├── carnes-ave
    │   └── ave.txt
    └── carnes-cabrito
        └── cabrito.txt
import os
import shutil

root_path = "/Users/ptts/test/cocina"
source_dirs = [
    os.path.join(root_path, item)
    for item in os.listdir(root_path)
    if os.path.isdir(os.path.join(root_path, item))
]
destination_dir = os.path.join(root_path, "carnes")

os.makedirs(destination_dir, exist_ok=True)
for source_dir in source_dirs:
    folder_name = os.path.basename(source_dir)
    if folder_name.startswith("carnes-"):
        print("Moving " + source_dir + " to " + destination_dir)
        shutil.move(source_dir, destination_dir)

之后

cocina
    ├── arroces
    └── carnes
        ├── carnes-ave
        │   └── ave.txt
        └── carnes-cabrito
            └── cabrito.txt