📌  相关文章
📜  如何使用Python移动带有子文件夹的文件夹列表?

📅  最后修改于: 2022-05-13 01:55:41.344000             🧑  作者: Mango

如何使用Python移动带有子文件夹的文件夹列表?

有时我们需要移动整个目录,或者可能有一个这样的目录列表,比如 A 连同它的子内容、文件和子文件夹到另一个目标目录 B。虽然这可以通过“剪切”和“粘贴”手动完成但是如果您要移动成百上千个目录怎么办,更不用说人为错误了!让我们看看如何使用shutil 模块通过几行代码在Python轻松完成此操作。

关闭模块

Shutil 提供了许多高级功能,这些功能有助于自动化复制、移动或删除文件或目录的过程,而不管使用的平台如何。它属于 Python 的标准实用程序模块,因此无需单独安装。

它有一个shutil.move()方法,它递归地将文件或目录(源)及其子内容移动到另一个位置(目标)并返回目标。如果目标目录已经存在,则将源移动到该目录中,否则在移动之前创建一个新目录。如果目标已经存在但不是目录,那么它可能会被覆盖或引发错误,具体取决于 os.rename() 规范。

假设目录的结构是这样的——



其中“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))


输出:

让我们检查目标文件夹,如下所示:

如您所见,我们将整个目录及其内容移动到目标目录(绝对路径指向“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))

输出:

让我们检查目标文件夹,如下所示:

目标文件夹包含上一个示例和这个示例中的所有目录!