Python shutil模块文件操作详解与实例
本文详细解析Python标准库shutil模块的核心功能,涵盖copyfileobj、copyfile、copymode、copystat、copy、copy2及copytree等文件复制方法,以及rmtree和move等移动与删除操作。通过具体代码示例说明各函数的参数差异、权限处理及路径要求,帮助开发者高效进行文件管理。
Python shutil模块概述
本文深入探讨Python中shutil文件操作工具的具体应用,通过详细的代码示例展示其功能,为读者在学习或实际工作中提供有价值的参考。
Python中的shutil模块提供了高层次的文件操作接口,其核心优势在于简化了文件的复制与删除流程,使相关操作更加直观和便捷。
shutil文件复制核心函数
一:shutil.copyfileobj(fsrc,fdst [23])
该函数用于将源文件fsrc的内容复制到目标文件fdst中。若指定整数长度参数,则作为缓冲区大小使用。需要注意的是,fsrc和fdst必须是已打开的文件对象,不能直接传入文件名字符串。
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)
代码如下:
f1 = open("111.txt", "r",encoding="utf-8")
f2 = open("222.txt", "w", encoding="utf-8")
shutil.copyfileobj(fsrc=f1, fdst=f2,length=15)
二:def copyfile(src, dst, *, follow_symlinks=True)
此函数用于直接拷贝整个文件。
运用代码如下:
shutil.copyfile("111.txt", "333.txt")
目标文件333.txt无需预先存在;若该文件已存在,则会被新内容覆盖。
文件权限与元数据复制
三:shutil.copymode(src,dst,*,follow_symlinks=True)
该操作仅复制源文件的权限属性,不会复制文件内容或其他元数据。
代码运用如下:
shutil.copymode("111.txt", "333.txt")
注意,源文件111.txt和目标文件333.txt都必须已存在。此操作将前者的权限复制到后者,相当于赋予后者与前者相同的权限,但不会改变后者的文件内容。
四:shutil.copystat(src,dst,*,follow_symlinks=True)
与copymode类似,但copystat会复制更多属性,包括权限、最后访问时间、最后修改时间以及文件标志(flags)。同样,此操作不会改变目标文件的内容。
shutil.copystat("111.txt", "333.txt")
文件与目录的高级复制
五:shutil.copy(src,dst,*,follow_symlinks=True)
该函数将源文件复制到目标文件或目录。若dst指定为目录,则使用src的基本文件名将文件复制到该目录中,并返回新创建文件的路径。
复制到文件的情况与前述类似:
shutil.copy("111.txt", dst="444.txt")
若复制到目录,只需指定第二个参数为路径,文件将以原文件名复制到该指定路径,示例如下:
shutil.copy("111.txt", dst="D:\\222.txt")
相比之下,copyfile函数必须在路径后指定文件名,以指定名称复制到目标路径,示例如下:
shutil.copy("111.txt", dst="D:\\222.txt")
六:shutil.copy2(src,dst,*,follow_symlinks=True)
在copy的基础上,copy2还会复制文件的最后访问时间和修改时间,功能类似于Linux命令cp -p。
目录树拷贝与递归删除
七:shutil.copytree(src,dst,symlinks=False,ignore=None,copyfunction=copy2,ignore_dangling_symlinks=False)
用于拷贝整个目录。若第三个参数为True,则在复制目录时保持文件夹下的符号链接;若为False,则在复制的目录下生成物理副本以替代符号链接。
shutil.copytree(src="11", dst="22")
注意:如果源目录和目标目录不在同一路径下,需要在路径前加上绝对路径或相对路径。
八:shutil.rmtree(路径,ignore_errors=False,onerror=None)
递归删除指定目录及其内部的所有内容:
代码如下:
shutil.rmtree("E:\py project\python_ku\subprocess_demo\\11")
文件移动操作
九:shutil.move(src,dst,copyfunction=copy2)
递归地将文件或目录(src)移动到另一个位置(dst),并返回目标路径。
shutil.move(src="11", dst="D:\\")
上述命令表示将当前路径下的11目录移动到D盘根目录下。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









