shutil库学习之copy和copy2函数
一、简介
shutil.copy
和shutil.copy2
是Python中shutil
模块提供的两个用于复制文件的函数。它们的主要功能都是将源文件复制到目标位置,但在处理元数据(如文件的修改时间、访问时间等)时有所不同。
写这篇博客的原因:某天我用copy函数拷贝图片,结果拷贝后的图片全都没法打开,蒙圈了,结果是由于copy和copy2的差别引起的。
二、语法和参数
shutil.copy
语法:
shutil.copy(src, dst, *, follow_symlinks=True)
参数:
src
: 源文件的路径。dst
: 目标路径,可以是文件或目录。如果是目录,则目标文件名将与源文件名相同。follow_symlinks
: (可选)默认为True
,表示如果src
是符号链接,复制链接指向的文件。设置为False
时,复制符号链接本身。
返回值:
返回目标文件的路径。
shutil.copy2
语法:
shutil.copy2(src, dst, *, follow_symlinks=True)
参数:
与shutil.copy
相同,但在复制文件的同时,还会复制文件的所有元数据,如修改时间、访问时间、权限等。
返回值:
返回目标文件的路径。
三、实例
3.1 使用 shutil.copy
复制文件
以下示例演示了如何使用shutil.copy
将一个文件复制到指定目录。
代码:
import shutil
# 将文件复制到指定目录
src = 'example.txt'
dst = 'backup/'
shutil.copy(src, dst)
输出:
'backup/example.txt'
3.2 使用 shutil.copy2
复制文件
此示例展示了使用shutil.copy2
复制文件,同时保留源文件的元数据。
代码:
import shutil
import os
# 将文件复制到指定目录,同时保留元数据
src = 'example.txt'
dst = 'backup/'
shutil.copy2(src, dst)
# 查看文件的修改时间
print("Original file modification time:", os.path.getmtime(src))
print("Copied file modification time:", os.path.getmtime(os.path.join(dst, 'example.txt')))
输出:
Original file modification time: 1660585200.0
Copied file modification time: 1660585200.0
四、注意事项
shutil.copy
不会复制文件的元数据,仅复制文件内容及权限。shutil.copy2
在复制文件内容的同时,也会复制文件的元数据,因此在需要保留文件属性时,应优先选择shutil.copy2
。- 当目标路径为目录时,文件将使用源文件名进行复制;如果目标路径为文件,则目标文件名将被指定。