当前位置: 首页 > 科技观察

一篇文章带你玩转Python中的Shutil模块

时间:2023-03-12 21:31:11 科技观察

大家好,我是围棋进阶。1.什么是shutil?Shutil可以简单理解为sh+util,shell工具的意思。shutil模块是os模块的补充,主要对文件进行复制、删除、移动、压缩、解压等操作。二、shutil模块的主要方法1、shutil.copyfileobj(fsrc,fdst[,length=16*1024])将文件内容复制到另一个文件中,可以复制指定大小的内容。该方法是shutil模块中其他copy方法的基础,其他方法本质上都是调用该方法。我们看一下它的源码:defcopyfileobj(fsrc,fdst,length=16*1024):while1:buf=fsrc.read(length)ifnotbuf:breakfdst.write(buf)代码很简单,可以看懂一眼。但需要注意的是,fsrc和fdst都是使用open()方法打开的文件对象。importshutils=open('fsrc.txt','r')d=open('fdst.txt','w')shutil.copyfileobj(s,d,length=16*1024)2.shutil.copyfile(src,dst)复制文件shutil.copyfile('f1.log','f2.log')#目标文件不需要存在3.shutil.copymode(src,dst)只有复制权限。内容、组、用户不变shutil.copymode('f1.log','f2.log')#目标文件必须存在4.shutil.copystat(src,dst)只复制状态信息,包括:模式位,atime,mtime,flagsshutil.copystat('f1.log','f2.log')#目标文件必须存在5.shutil.copy(src,dst)复制文件和权限importshutilshutil.copy('f1.log','f2.log')6。shutil.copy2(src,dst)复制文件和状态信息importshutilshutil.copy2('f1.log','f2.log')7。shutil.copytree(src,dst,symlinks=False,ignore=None)递归复制文件夹src:源文件夹dst:复制到dst文件夹,文件夹会自动创建,需要保证这个文件夹不存在,否则会报错symlinks:是否复制软链接,True复制软链接,False不复制,软链接会作为文件复制,默认Falseignore:忽略模式,可以通过ignore_patterns()copy_function:复制文件方法,可以传入一个可执行的处理函数,默认为copy2,Python3新增参数ignore_dangling_symlinks:当sysmlinks设置为False时,复制指向已删除文件的软链接时会报错。如果你想消除这个异常,你可以将这个值设置为True。默认为False,Python3中的新参数。importshutil,osfolder1=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"))8.shutil.rmtree(path[,ignore_errors[,onerror]])递归删除文件importshutilshutil.rmtree('folder1')9.shutil.move(src,dst)递归移动文件,类似于mv命令,其实就是重命名。importshutilshutil.move('folder1','folder3')10.shutil.make_archive(base_name,format[,root_dir[,base_dir,verbose,dry_run,owner,group,logger])创建压缩包并返回文件路径,对于例如:zip,tar创建一个压缩包并返回文件路径,例如:zip,tarbase_name:压缩包的文件名,或者压缩包的路径。如果只是文件名,则保存到当前目录,否则保存到指定路径,例如将data_bak保存到当前路径如:/tmp/data_bak=>保存到/tmp/格式:压缩包type,"zip","tar","bztar","gztar"root_dir:要压缩的文件夹路径(默认当前目录)owner:用户,默认当前用户组:组,默认当前组logger:用于记录日志,通常logging.Logger对象会把当前目录下面的文件压缩生成一个copy.zip文件到当前目录。注意:该操作会导致递归复制压缩导致文件损坏(当前目录下的copy.zip中会有copy.zip)importshutilshutil.make_archives('D:\copy3\copy','zip',base_dir='D:\copy2\\test.txt')压缩D:\copy2\test.txt文件,在D:\copy3\路径下生成copy.zip。importshutilshutil.make_archives('copy','zip')三、总结本文主要介绍Python中的shutil模块,并详细介绍模块中的主要方法。对遇到的问题进行详细的解答。最后,使用Python编程语言,通过项目实际开发。方便大家了解shutil模块。希望对大家的学习有所帮助。本文转载自微信公众号《Go语言进阶学习》,可通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。