【问题标题】:When I use shutil.move() it deletes one folder当我使用 shutil.move() 时,它会删除一个文件夹
【发布时间】:2021-07-08 18:14:23
【问题描述】:

我在另一个文件中托管了一系列文件。这些文件涉及各种烹饪菜肴,并存放在一个名为“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”文件夹,该文件夹是在我运行代码后直接创建的。

有人知道会发生什么吗?

提前致谢。

【问题讨论】:

    标签: python directory operating-system subdirectory shutil


    【解决方案1】:

    看看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
    

    【讨论】:

    • 谢谢!!我不知道那件事。我认为使用shutil.move 将创建新目录,然后将文件夹移动到其中。好解释!!下次我会记住的:)
    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多