返回

Python 复制目录:使用 shutil 管理文件和目录

python

使用 Python 将整个文件目录复制到现有目录

在进行编程任务时,我们经常需要复制文件和目录。Python 提供了 shutil 模块,它提供了方便的方法来管理文件和目录的复制、移动和删除。

复制文件目录

要使用 Python 复制整个文件目录,我们可以使用 shutil.copytree() 函数。该函数将递归地复制源目录及其所有子目录和文件到目标目录。

import shutil

# 复制目录 'foo' 到目录 'bar'
shutil.copytree('foo', 'bar')

覆盖现有文件

默认情况下,shutil.copytree() 会在目标目录中存在同名文件时引发 OSError 异常。为了覆盖现有文件,我们可以使用 ignore 参数。ignore 参数接受一个函数,该函数将源目录中的每个条目(目录或文件)作为参数,并返回一个布尔值。如果函数返回 True,则跳过该条目。如果返回 False,则复制该条目。

要覆盖目标目录中的现有文件,我们可以传递一个函数,始终返回 False

import shutil

# 覆盖目标目录 'bar' 中的现有文件
shutil.copytree('foo', 'bar', ignore=shutil.ignore_patterns(''))

示例

考虑以下示例:

import shutil

# 将目录 'src' 及其子目录复制到目录 'dest' 中,覆盖现有文件
shutil.copytree('src', 'dest', ignore=shutil.ignore_patterns(''))

在运行此代码后,目录 src 及其所有子目录和文件将被复制到目录 dest 中。如果 dest 目录中已存在同名文件,则它们将被覆盖。

常见问题解答

1. 如何保留文件权限?

shutil.copytree() 函数不保留源文件的权限。要保留权限,可以使用 shutil.copystat() 函数。

2. 如何复制符号链接?

shutil.copytree() 函数默认不会复制符号链接。要复制符号链接,可以使用 copytree 函数的 symlinks=True 参数。

3. 如何排除某些文件或目录?

可以使用 ignore 参数来排除某些文件或目录。ignore 参数接受一个函数,该函数将源目录中的每个条目(目录或文件)作为参数,并返回一个布尔值。如果函数返回 True,则跳过该条目。如果返回 False,则复制该条目。

4. 如何只复制文件,不复制目录?

可以使用 shutil.copy2() 函数复制文件而不复制目录。

5. 如何使用 shutil 模块进行其他文件和目录操作?

shutil 模块提供了许多其他方法来管理文件和目录,包括移动、删除、复制和创建。有关这些方法的更多信息,请参阅 Python 官方文档。