如何使用Python移动带有子文件夹的文件夹列表?
有时我们需要移动整个目录,或者可能有一个这样的目录列表,比如 A 连同它的子内容、文件和子文件夹到另一个目标目录 B。虽然这可以通过“剪切”和“粘贴”手动完成但是如果您要移动成百上千个目录怎么办,更不用说人为错误了!让我们看看如何使用shutil 模块通过几行代码在Python轻松完成此操作。
关闭模块
Shutil 提供了许多高级功能,这些功能有助于自动化复制、移动或删除文件或目录的过程,而不管使用的平台如何。它属于 Python 的标准实用程序模块,因此无需单独安装。
它有一个shutil.move()方法,它递归地将文件或目录(源)及其子内容移动到另一个位置(目标)并返回目标。如果目标目录已经存在,则将源移动到该目录中,否则在移动之前创建一个新目录。如果目标已经存在但不是目录,那么它可能会被覆盖或引发错误,具体取决于 os.rename() 规范。
Syntax: shutil.move(source, destination, copy_function = copy2)
假设目录的结构是这样的——
其中“dest”是我们的目标文件夹。
示例 #1:基于目录列表
在这里,我们列出了要移动的目录。为简单起见,所有目录都在同一个文件夹中,您也可以从不同的基本目录移动。
Python3
# import shutil module
import shutil
# import os module
import os
# base path
base_path = 'C:/Users/Pulkit/GFG_Articles/root'
# list of directories we want to move.
dir_list = ['test2', 'test4', 'test5', 'does_not_exist']
# path to destination directory
dest = os.path.join(base_path, 'dest')
print("Before moving directories:")
print(os.listdir(base_path))
# traverse each directory in dir_list
for dir_ in dir_list:
# create path to the directory in the
# dir_list.
source = os.path.join(base_path, dir_)
# check if it is an existing directory
if os.path.isdir(source):
# move to destination path
shutil.move(source, dest)
print("After moving directories:")
print(os.listdir(base_path))
Python3
# import shutil module
import shutil
# import os module
import os
# base path
base_path = 'C:/Users/Pulkit/GFG_Articles/root'
# get all directories in our base path.
all_dir = os.listdir(base_path)
# path to destination directory
dest = os.path.join(base_path, 'dest')
print("Before moving directories:")
print(os.listdir(base_path))
for dir_ in all_dir:
# check if the dir_ follows the required
# pattern.
if dir_.startswith('web'):
# create path to this directory.
source = os.path.join(base_path, dir_)
# move to destination path
shutil.move(source, dest)
print("After moving directories:")
print(os.listdir(base_path))
输出:
Before moving directories:
[‘dest’, ‘test1’, ‘test2’, ‘test3’, ‘test4’, ‘test5’, ‘web_tools_express’, ‘web_tools_html’, ‘web_tools_node’, ‘web_tools_react’]
After moving directories:
[‘dest’, ‘test1’, ‘test3’, ‘web_tools_express’, ‘web_tools_html’, ‘web_tools_node’, ‘web_tools_react’]
让我们检查目标文件夹,如下所示:
如您所见,我们将整个目录及其内容移动到目标目录(绝对路径指向“dest”目录)。
示例 2:基于模式
假设我们要将遵循特定名称模式的目录移动到我们的目的地。让我们移动名称以“web”开头的所有目录。您可以根据需要使用任何模式。这将是一个更实际的用例,其中我们有数百个目录。
蟒蛇3
# import shutil module
import shutil
# import os module
import os
# base path
base_path = 'C:/Users/Pulkit/GFG_Articles/root'
# get all directories in our base path.
all_dir = os.listdir(base_path)
# path to destination directory
dest = os.path.join(base_path, 'dest')
print("Before moving directories:")
print(os.listdir(base_path))
for dir_ in all_dir:
# check if the dir_ follows the required
# pattern.
if dir_.startswith('web'):
# create path to this directory.
source = os.path.join(base_path, dir_)
# move to destination path
shutil.move(source, dest)
print("After moving directories:")
print(os.listdir(base_path))
输出:
Before moving directories:
[‘dest’, ‘test1’, ‘test3’, ‘web_tools_express’, ‘web_tools_html’, ‘web_tools_node’, ‘web_tools_react’]
After moving directories:
[‘dest’, ‘test1’, ‘test3’]
让我们检查目标文件夹,如下所示:
目标文件夹包含上一个示例和这个示例中的所有目录!