当我使用 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”文件夹,该文件夹是在我 运行 代码后直接创建的.
有人知道会发生什么吗?
提前致谢。
当您尝试将 /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
我在另一个文件中托管了一系列文件。这些文件涉及各种烹饪菜肴,并保存在名为 '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”文件夹,该文件夹是在我 运行 代码后直接创建的.
有人知道会发生什么吗?
提前致谢。
当您尝试将 /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