Python shutil标准库文件操作详解
本文详细介绍Python标准库shutil的高级文件操作功能,涵盖copyfile、copytree、move及rmtree等常用方法。解析参数如follow_symlinks的作用,并讲解make_archive与unpack_archive在压缩归档中的应用,助力高效文件管理。
本文通过具体实例解析Python标准库shutil的使用方法,供读者参考学习。
shutil模块提供了大量针对文件和文件集合的高级操作接口,尤其侧重于支持文件的复制与删除功能。
文件夹与文件操作
copyfileobj(fsrc, fdst, length=16*1024):该函数将fsrc文件的内容复制到fdst文件中。其中,length参数指定了从fsrc每次读取数据的长度,用作缓冲区大小。
- fsrc:指定源文件对象。
- fdst:指定目标文件对象,内容将被复制至此。
- length:指定缓冲区大小,即fsrc每次读取数据的字节长度。
import shutil
f1 = open("file.txt","r")
f2 = open("file_copy.txt","a+")
shutil.copyfileobj(f1,f2,length=1024)
copyfile(src, dst):将src文件的内容直接复制到dst文件中。
- src:指定源文件的路径。
- dst:指定目标文件路径。若dst文件不存在,系统会自动创建;若已存在,则会被覆盖。
- follow_symlinks:Python3新增参数。若设为True,当src为软链接时,将其视为普通文件进行复制;若设为False,则复制软链接本身。默认值为True。
import shutil
shutil.copyfile("file.txt","file_copy.txt")
copymode(src, dst):仅将src文件的权限模式复制到dst文件,不改变文件内容、所有者及所属组。
- src:指定源文件路径。
- dst:指定目标文件路径。dst必须是真实存在的路径,且文件必须已存在,否则将抛出文件未找到的错误。
- follow_symlinks:Python3新增参数。若设为False,且src和dst均为软链接,则复制软链接的权限;若设为True,则将其视为普通文件复制权限。默认值为True。
import shutil
shutil.copymode("file.txt","file_copy.txt")
copystat(src, dst):将src文件的权限、最后访问时间、最后修改时间以及状态标志复制到dst文件。同样,文件内容、所有者及所属组不受影响。
- src:指定源文件路径。
- dst:指定目标文件路径。dst必须是真实存在的路径,且文件必须已存在,否则将抛出文件未找到的错误。
- follow_symlinks:Python3新增参数。若设为False,且src和dst均为软链接,则复制软链接的权限、最后访问时间、最后修改时间及状态标志;若设为True,则视为普通文件复制。默认值为True。
import shutil
shutil.copystat("file.txt","file_copy.txt")
copy(src, dst):将文件src复制到dst。若dst是目录,则在该目录下创建一个与src同名的文件;若该目录下已存在同名文件,将报错提示文件已存在。此操作会一并复制文件权限,其本质是依次调用copyfile和copymode方法。
- src:指定源文件路径。
- dst:指定目标文件夹或文件路径。
- follow_symlinks:Python3新增参数。若设为False,且src和dst均为软链接,则复制软链接权限;若设为True,则视为普通文件复制权限。默认值为True。
improt shutil,os
shutil.copy("file.txt","file_copy.txt")
# 或者
shutil.copy("file.txt",os.path.join(os.getcwd(),"copy"))
copy2(src, dst):将文件src复制到dst。若dst是目录,则在该目录下创建一个与src同名的文件;若该目录下已存在同名文件,将报错提示文件已存在。此操作会一并复制权限、最后访问时间、最后修改时间及状态标志,其本质是依次调用copyfile和copystat方法。
- src:指定源文件路径。
- dst:指定目标文件夹或文件路径。
- follow_symlinks:Python3新增参数。若设为False,且src和dst均为软链接,则复制软链接权限、最后访问时间、最后修改时间及状态标志;若设为True,则视为普通文件复制。默认值为True。
improt shutil,os
shutil.copy2("file.txt","file_copy.txt")
# 或者
shutil.copy2("file.txt",os.path.join(os.getcwd(),"copy"))
ignore_patterns(*patterns):用于定义忽略模式,通常配合copytree()方法使用。传入的文件名将被忽略,不会执行拷贝操作。
- patterns:指定文件名称的元组。
copytree(src, dst, symlinks=False, ignore=None):递归拷贝目录树,将src文件夹内的所有内容拷贝至dst文件夹。
- src:指定源文件夹路径。
- dst:指定目标文件夹路径。该文件夹会自动创建,但必须保证此文件夹不存在,否则将报错。
- symlinks:指定是否复制软链接。设为True则复制软链接,设为False则不复制(软链接会被当作普通文件复制)。默认值为False。
- ignore:指定忽略模式,可传入
ignore_patterns()函数。 - copy_function:指定拷贝文件的方式,可传入一个可执行的处理函数,默认值为copy2。此为Python3新增参数。
- ignore_dangling_symlinks:当symlinks设为False时,若遇到指向已删除文件的软链接,拷贝操作会报错。若希望消除此异常,可将此值设为True。默认值为False,此为Python3新增参数。
import shutil,os
folder1 = os.path.join(os.getcwd(),"aaa")
# bbb与ccc文件夹都可以不存在,会自动创建
folder2 = os.path.join(os.getcwd(),"bbb","ccc")
# 将"abc.txt","bcd.txt"忽略,不复制
shutil.copytree(folder1,folder2,ignore=shutil.ignore_patterns("abc.txt","bcd.txt")
rmtree(path, ignore_errors=False, onerror=None):递归移除目录树,即删除指定的文件夹目录。
- ignore_errors:指定是否忽略错误,默认值为False。
- onerror:定义错误处理函数,需传入一个可执行的处理函数。该函数接收三个参数:出错函数、路径和异常信息excinfo。
import shutil,os folder1 = os.path.join(os.getcwd(),"aaa") shutil.rmtree(folder1)
move(src, dst):将src移动至dst目录下。若dst目录不存在,效果等同于将src重命名为dst;若dst目录存在,则将src文件夹的所有内容移动至该目录下。
- src:指定源文件夹或文件路径。
- dst:指定目标文件夹路径,或将文件重命名为dst文件。若src为文件夹而dst被指定为文件路径,将报错。
- copy_function:指定拷贝文件的方式,可传入一个可执行的处理函数,默认值为copy2。此为Python3新增参数。
import shutil,os # 示例一,将src文件夹移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作 folder1 = os.path.join(os.getcwd(),"aaa") folder2 = os.path.join(os.getcwd(),"bbb") shutil.move(folder1, folder2) # 示例二,将src文件移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作 file1 = os.path.join(os.getcwd(),"aaa.txt") folder2 = os.path.join(os.getcwd(),"bbb") shutil.move(file1, folder2) # 示例三,将src文件重命名为dst文件(dst文件存在,将会覆盖) file1 = os.path.join(os.getcwd(),"aaa.txt") file2 = os.path.join(os.getcwd(),"bbb.txt") shutil.move(file1, file2)
disk_usage(path):获取当前路径所在硬盘的使用情况。此为Python3新增方法。
- path:指定文件夹或文件路径。在Windows系统中必须是文件夹路径,在Linux系统中可以是文件路径或文件夹路径。
import shutil.os path = os.path.join(os.getcwd(),"aaa") info = shutil.disk_usage(path) print(info) # usage(total=95089164288, used=7953104896, free=87136059392)
chown(path, user=None, group=None):修改路径指向的文件或文件夹的所有者或所属组。此为Python3新增方法。
- path:指定目标路径。
- user:指定所有者。传递的user值必须是系统中真实存在的用户,否则将报错提示no such user。
- group:指定所属组。传递的group值必须是系统中真实存在的组,否则将报错提示no such group。
import shutil,os path = os.path.join(os.getcwd(),"file.txt") shutil.chown(path,user="root",group="root")
which(cmd, mode=os.F_OK | os.X_OK, path=None):查找给定cmd命令的可执行文件路径。此为Python3新增方法。
import shutil
info = shutil.which("python3")
print(info) # /usr/bin/python3
归档操作
shutil模块还提供了创建和读取压缩及存档文件的高级接口,其内部实现主要依赖于zipfile和tarfile模块。
make_archive(base_name, format, root_dir, …):用于生成压缩文件。
- base_name:指定压缩文件的文件名,不允许包含扩展名,因为系统会根据指定的压缩格式自动添加相应的扩展名。
- format:指定压缩格式。
- root_dir:指定需要被压缩的文件夹路径。
import shutil,os base_name = os.path.join(os.getcwd(),"aaa") format = "zip" root_dir = os.path.join(os.getcwd(),"aaa") # 将会root_dir文件夹下的内容进行压缩,生成一个aaa.zip文件 shutil.make_archive(base_name, format, root_dir)
get_archive_formats():获取当前支持的压缩文件格式。目前支持tar、zip、gztar、bztar。在Python3中额外支持xztar格式。
unpack_archive(filename, extract_dir=None, format=None):执行解压操作。此为Python3新增方法。
- filename:指定待解压的文件路径。
- extract_dir:指定解压后的目标文件夹路径。该文件夹可以不存在,系统会自动生成。
- format:指定解压格式,默认值为None,系统会根据文件扩展名自动选择解压格式。
import shutil,os zip_path = os.path.join(os.getcwd(),"aaa.zip") extract_dir = os.path.join(os.getcwd(),"aaa") shutil.unpack_archive(zip_path, extract_dir)
get_unpack_formats():获取当前支持的解压文件格式。目前支持tar、zip、gztar、bztar和xztar。此为Python3新增方法。
关于shutil模块的更多详细信息,可查阅官方文档:https://docs.python.org/3/library/shutil.html
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家进行Python程序设计有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









