Python复制、移动文件或文件夹:copy()、move()、rmtree()
在文件和文件夹管理中,复制、移动和删除非空目录是非常常见的操作。Python提供了shutil
模块中的方法,能够方便、高效地完成这些任务。本节将详细介绍shutil.copy()
、shutil.move()
和shutil.rmtree()
的使用方法,帮助读者掌握如何在编程中灵活操作文件系统。
1. 复制文件或目录:shutil.copy()
与 shutil.copytree()
(1)shutil.copy()
shutil.copy()
用于将单个文件从源路径复制到目标路径。它不仅会复制文件内容,还会保留文件的权限信息(如可读、可写属性),但不会复制文件的元数据(如创建时间和修改时间)。
基本语法:
shutil.copy(src, dst)
- 参数
src
表示源文件路径,dst
表示目标路径。 - 如果目标路径是目录,则文件会复制到该目录下,并保持原文件名。
示例代码:
import shutil
# 定义源文件和目标路径
src_file = "source.txt"
dst_dir = "backup_folder"
try:
shutil.copy(src_file, dst_dir) # 复制文件到目标目录
print(f"文件 '{src_file}' 已成功复制到 '{dst_dir}'。")
except FileNotFoundError:
print(f"源文件 '{src_file}' 不存在,请检查路径。")
except PermissionError:
print("没有足够的权限进行复制操作。")
代码解析:
上述代码中,shutil.copy()
方法将指定的文件source.txt
复制到目标目录backup_folder
中。try-except
块用于捕获可能发生的异常,如文件不存在或权限不足的错误,从而提高代码的健壮性。
(2)shutil.copytree()
如果需要递归地复制整个目录,包括目录中的所有子目录和文件,可以使用shutil.copytree()
方法。
基本语法:
shutil.copytree(src, dst)
- 参数
src
是源目录路径,dst
是目标目录路径。 - 如果目标路径已存在,会引发
FileExistsError
异常。
示例代码:
import shutil
# 定义源目录和目标目录
src_dir = "source_folder"
dst_dir = "backup_folder"
try:
shutil.copytree(src_dir, dst_dir) # 递归复制整个目录
print(f"目录 '{src_dir}' 已成功复制到 '{dst_dir}'。")
except FileExistsError:
print(f"目标目录 '{dst_dir}' 已存在,请选择其他路径。")
代码解析:
在该代码中,shutil.copytree()
会复制source_folder
中的所有内容到backup_folder
,包括嵌套的子目录和文件。如果目标路径已存在,则会抛出异常,因此需要提前确认目标路径是否为空。
2. 移动文件或目录:shutil.move()
shutil.move()
是一个强大的工具,用于将文件或目录从一个路径移动到另一个路径。如果目标路径已存在相同名称的文件或目录,则会覆盖目标内容。
基本语法:
shutil.move(src, dst)
- 参数
src
是源路径,dst
是目标路径。 - 支持文件和目录的移动。
示例代码:
import shutil
# 定义源路径和目标路径
src_path = "old_folder"
dst_path = "new_folder"
try:
shutil.move(src_path, dst_path) # 移动文件或目录
print(f"'{src_path}' 已成功移动到 '{dst_path}'。")
except FileNotFoundError:
print(f"源路径 '{src_path}' 不存在,请检查路径。")
except PermissionError:
print("没有足够的权限进行移动操作。")
代码解析:
该代码中,shutil.move()
方法将old_folder
目录移动到new_folder
路径。如果目标路径是现有目录,则移动的内容会被存放在该目录下;如果目标路径是一个文件或不存在的路径,则会直接覆盖或创建目标。
3. 删除非空目录:shutil.rmtree()
shutil.rmtree()
是专门用于递归删除目录及其内容的方法,适用于需要一次性清空并删除整个目录的情况。
基本语法:
shutil.rmtree(path)
- 参数
path
是需要删除的目录路径。 - 删除操作会清空目录中的所有文件和子目录,无法恢复。
示例代码:
import shutil
# 定义需要删除的目录路径
dir_to_remove = "old_folder"
try:
shutil.rmtree(dir_to_remove) # 删除非空目录
print(f"目录 '{dir_to_remove}' 已成功删除。")
except FileNotFoundError:
print(f"目录 '{dir_to_remove}' 不存在。")
except PermissionError:
print("没有足够的权限删除该目录。")
代码解析:
上述代码中,shutil.rmtree()
会删除指定目录old_folder
及其所有内容,包括子目录和文件。与文件的删除不同,删除目录时需要特别注意目标目录的路径正确性,以避免误删除重要数据。
通过对shutil.copy()
、shutil.move()
和shutil.rmtree()
的学习,读者可以在实际编程中灵活地管理文件和目录。这些方法在数据备份、文件重命名以及自动化脚本中应用广泛,是Python文件管理中的重要工具。