Python Shutil 模块

2024 年 8 月 29 日 | 阅读 6 分钟

在本教程中,我们将学习 Python 的 Shutil 模块。我们将讨论如何使用 Python 脚本执行高级文件操作,例如创建新文件并将其归档,以及将一个文件内容复制到另一个文件。让我们对 Shutil 模块做一个基本介绍。

Python Shutil 模块

Python shutil 模块提供了执行高级文件操作的功能。它可以与文件对象一起操作,并为我们提供了复制和删除文件的能力。它处理低级语义,例如在执行所有操作后创建和关闭文件对象。

Shutil 模块的工作原理

Python shutil 模块带有许多内置方法。我们将探讨一些重要的方法。要开始使用此模块,我们首先需要将其导入到我们当前的 Python 文件中。

复制文件

此模块提供了 copy() 函数,用于将数据从一个文件复制到另一个文件。文件必须在同一目录中,并且目标文件必须是可写的。让我们了解以下语法。

语法-

参数

在上面的语法中 -

  • 第一个参数是源,显示源文件的路径。
  • 第二个参数是目标,显示目标文件的路径。
  • 第三个参数是可选的;此参数的默认值为 true。
  • 它返回一个字符串,显示新创建文件的路径。

让我们理解下面的例子。

示例 -

输出

Empty Folder: []
File Copied Name: ['testcompare.py']

解释 -

copy() 函数将目录名作为参数。这里 元数据 未被复制,复制的文件将被视为新创建的文件。此方法还克隆了文件的所有权限。需要注意的是,如果目标文件已存在,它将被源文件替换。

让我们看另一个例子。

示例 - 2:如果目标是目录

输出

D:\Python Project\NewFile\hello.txt

正如我们已经提到的,copy() 函数不复制元数据。但是,我们将使用 copy2() 函数,该函数允许我们复制文件(包括其元数据)。

示例 - 3:使用 copy 方法时的错误处理

输出

Source and destination represents the same file.

copy2() 函数

此函数与 copy() 函数类似。它也可以将一个文件的内容复制到另一个文件,但唯一的区别是它可以保留文件的元数据。让我们了解以下语法。

语法

参数

在上面的语法中 -

  • 第一个参数是源,显示源文件的路径。
  • 第二个参数是目标,显示目标文件的路径。
  • 第三个参数是可选的;此参数的默认值为 true。
  • 它返回一个字符串,显示新创建文件的路径。

让我们理解下面的例子。

示例 -

输出

os.stat_result(st_mode=33206, st_ino=562949953459285, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815671, st_mtime=1622705607, st_ctime=1622705607)
After copying file
os.stat_result(st_mode=33206, st_ino=562949953459287, st_dev=3029671014, st_nlink=1, st_uid=0, st_gid=0, st_size=17, st_atime=1622815748, st_mtime=1622705607, st_ctime=1622706243)
D:\Python Project\NewFile\hello.txt

shutil.copyfile() 函数

此方法用于将源文件的内容复制到目标文件(不包括元数据)。源和目标必须是文件,并且目标文件必须提供写入权限。如果目标文件已存在,它将被新文件替换,否则将创建新文件。

让我们看以下语法。

语法

参数

在上面的语法中 -

  • 第一个参数是源,显示源文件的路径。
  • 第二个参数是目标,显示目标文件的路径。
  • 第三个参数是可选的;此参数的默认值为 true。
  • 它返回一个字符串,显示新创建文件的路径。

让我们理解下面的例子。

示例 -

输出

D:\Python Project\NewFile\hi.txt

shutil.copytree() 函数

此方法用于复制完整的目录。它将源目录树复制到目标目录。目标目录不得已存在。让我们看以下语法。

语法

参数

在上述语法中

  • src - 它显示源目录的路径。
  • dest - 它显示目标目录的路径。
  • symlinks(可选) - 它接受布尔值 True 和 False。它决定是否将原始链接的元数据或链接复制到新树。
  • ignore(可选) - 默认情况下为 None,但如果传递了 ignore,它必须是一个可调用对象,可以作为参数接收。copytree() 将访问该目录。
  • copy_function(可选) - copy2 是此参数的默认值。copy() 函数可以用作参数。
  • ignore_dangling_symlinks(可选) - 此参数用于在符号链接指向的文件不存在时引发异常。
  • 它返回一个字符串,表示新创建目录的路径。

示例 -

输出

Destination path: D:\Python Project\NewFolder

shutil.rmtree()

此方法用于删除完整的目录树。让我们看以下语法。

语法

参数 -

在上面的语法中 -

  • path - 它表示文件路径。路径类对象可以是字符串或字节对象。
  • ignore_errors - 如果此参数为 True,则会忽略删除。
  • onerror - 如果 ignore_errors 为 false,则通过调用 onerror 指定的处理程序来处理此类错误。

让我们理解以下示例 -

示例 -

上面的代码将删除指定的目录。

shutil.which() 函数

shutil.which() 函数用于获取如果调用给定的 cmd 将运行的可执行应用程序的路径。它在给定路径中查找文件。让我们看以下语法。

语法

参数

在上面的语法中 -

  • cmd - 它是代表文件的字符串。
  • mode - 它指定方法应执行的文件模式。
  • path - 此参数指定要使用的路径。
  • 此方法返回可执行应用程序的路径。

让我们理解下面的例子。

示例 -

输出

C:\Python\python.EXE

它将在计算机中查找给定的文件,如果找到文件,则返回文件的路径,否则返回 None。