利用shutil模块进行高效文件管理(Python教程)日常的Windows图形界面命令配合快捷键能否替代使用编程语言来做文件管理呢?如果文件数量比较少,确实前者更加便捷,但如果是涉及到成千上万的文件数目,那么前者反而略显笨拙,这时后者的效率就凸显出来了。
Python中的shutil模块涵盖了图形界面中的“复制,粘贴,剪切,重命名”等命令,常用于文件日常管理操作,而且基本可以取代DOS批处理中的文件操作类函数,而且代码上更加优雅,便于理解,而且shutil可以显著提高文件管理的效率,而不必纠结于各种复杂的文件对象和循环结构的相关代码。
一、常用的4个方法
py
功能:将目标文件另存为一个新的文件副本,或复制到一个新的文件夹中。
参数:py(源文件, 目标文件名或目标文件夹路径)
案例:
①把一个文件另存为一个副本,并进行重命名:
(*假设在桌面上有一个名为“原文件.txt”的文本文档,现在须要另存备份)
import os,shutil
os.chdir(“C:\\Users\\Ace\\Desktop”)
注:
①为了省略重复书写文件路径,这里事先把当前工作路径使用os.chdir()方法切换到了桌面(Desktop)上,这样py中的两个参数的文件都无需再写文件路径为桌面,而默认就在桌面上操作,所以只需要写两个简单的文件名即可;
②由于两个文件都默认在当前工作路径下(Desktop),所以备份的新文件自然也是粘贴到桌面上。如果须要把备份的文件放到其他路径下,可以在第二参数中直接写上具体路径,比如:py(“原文件.txt”,“D:\\我的文件\\备份文件.txt”),而如果省略,则默认备份到当前工作路径下。
②把一个文件复制到一个新的文件夹中进行备份:
import os,shutil
os.chdir(“C:\\Users\\Ace\\Desktop”)
os.mkdir(“C:\\Users\\Ace\\Desktop\\备份文件夹”)
注:
python怎么读取桌面上的文件①要备份到一个文件夹中时,如果这个文件夹当前不存在,则必须先使用os.mkdir创建这个文件夹,这里为了清晰写了文件夹的完整路径,其实没必要,可以直接写文件夹名称,默认会在桌面创建。如果是已经存在的其他文件夹,则可以直接写入py 的第二参数中;
②如果不创建文件夹,而是直接把想要创建的文件夹的名称写入py的第二参数,那么python是不会创建这个文件夹的,而是会创建一个以这个名字命名的txt文件作为原文件的副本(而且不会带.txt扩展名,若要打开须要手动添加),这一点须要注意;
③如果创建了文件夹,但是在py第二参数中没有写备份文件的名称,例如:py(“原文件.txt”,“备份文件夹”),那么python会以和原文件相同的名字(即“原文件.txt”,在“备份文件夹”这个文件夹中创建一个副本。
pytree
功能:将目标文件夹(含其子文件夹中所有内容)备份到另一个文件夹中。
参数:py(原文件夹, 目标文件夹)
案例:
①把桌面上的一个文件夹,备份到D盘根目录下
(*假设我们要把C盘桌面上的名为“原文件夹”的文件夹备份到D盘根目录下,并把备份的副本命名为“备份文件夹”)
import os,shutil
os.chdir(“C:\\Users\\Ace\\Desktop”)
注:
①pytree和py不同,即使没有使用os.mkdir创建用于备份的文件夹,它也会在调用自身的时候直接创建第二参数上的文件夹,因为copytree是一个专用于文件夹复制的方法,所以这里会在D盘根目录下直接创建名为“备份文件夹”的文件夹;
②pytree的复制方法属于递归式复制(深度拷贝),即:被备份的文件下的所有子文件夹及其中的文件会跟着被一起备份,不会遗漏子文件夹中的内容。
ve
功能:把原文件移动到另外一个路径下,类似于“剪切+粘贴”功能。
参数:ve(原文件, 目标文件夹)
案例:
把一个文件剪切粘贴(即移动)到另一个文件夹下:
(*假设这里我们把C盘桌面上的“原文件.txt”,移动到同意路径下的名为“备份文件夹”的文件夹中)
import os,shutil
os.chdir(“C:\\Users\\Ace\\Desktop”)
os.mkdir(“C:\\Users\\Ace\\Desktop\\备份文件夹”)
注:
①ve涉及到把文件移动到某一个不存在的文件夹时,须要先使用os.mkdir创建用于备份的这个空文件夹,否则也会像py一样直接创建一个源文件的备份,并且以ve的第二参数的文件夹名称来命名,同时不带任何扩展名(例如这里就不会带有.txt),那么这显然不是我们希望得到的!所以切记ve和py在涉及到往一个不存在的文件夹中备份或移动文件,必须使用os.mkdir来创建这个文件夹!
②如果用于存放移动后的原文件的文件夹已经存在,并且其中有一个和原文件同名(比如这里就叫“原文件.txt”)的文件时,那么这个文件将被覆盖。
功能:删除某个文件夹,包含其中的所有子文件夹及文件。
参数:(目标文件夹)
案例:
①删除桌面上名为“新建文件夹”的文件夹
import shutil
<(“C:\\Users\\Ace\\Desktop\\新建文件夹”)
注:
①如果要删除桌面上的多个文件夹,又懒得每一次把桌面的路径(“C:\\Users\\Ace\\ Desktop”)重新写一次,也可以先使用os.chdir来更改当前工作路径为桌面的路径,
然后就可以省略它,直接写桌面文件夹的名称了。
②如果传递给的待删除的文件夹不存在,则会直接报错。
二、和“copy”有关的另外几个方法的简介
由于这几个方法的语法结构,基本上和py一致,这里只讲下每个方法的功能。
pyfile
功能:用于把一个文件进行备份。功能和py类似,但是后者更强,因为pyfile(原文件,目标文件)的两个参数都必须是文件,而py的第二参数可以是文件,也可以是路径,所以
日常一般会使用功能更强的py来替代它,所以pyfile实际用的很少。
pyfileobj
功能:用于将一个文件的内容拷贝到另一文件中,由于涉及到文件中的内容,一般是配合python的文件读写方法来使用的。实际用的也不算特别频繁。
import os,shutil
os.chdir(“C:\\Users\\Ace\\Desktop”)
注:
①py方法配合open方法使用,一定要注意被读取文件和被粘贴文件的读写模式,读取一般用r,写入一般用w或者a;
②这里为了在写open方法时,省略文件名前面的路径,直接先用os.chdir把当前工作路径改到了桌面:“C:\\Users\\Ace\\Desktop”,这样比较方便快捷,日常也可以通过这种方式简化频繁地书写文件路径的步骤。
pymode和pystat,py2
功能:pymode(src,dst)、pystat(src,dst)、py2(src,dst)的语法结构和pyfile类似,都是针对单个文件的操作,其中pymode拷贝的部分为“仅拷贝文件的权限”,而pystat拷贝的部分为“文件状态信息”,比如:访问时间,修改时间等。而py2拷贝的是“文件本身和文件状态信息”
三、学习总结
今天主要讲了Python中的文件操作模块shutil中的几个常用方法,包括:①复制文件的py方法;②复制或者删除文件夹的pytree和;
③剪切文件的ve方法,以及围绕py诞生的针对文件的不同相关信息进行复制的一些方法。
须要注意的地方是,在使用py和ve时,如果涉及到向文件夹中存放文件,那么必须先保证这个文件夹是存在的,它并不会随着这两个方法中的第二参数而被自动创建,而只能通过事先使用os.mkdir来创建,或者干脆选择之前已经存在的文件夹。如果文件夹不存在时强制运行这两个方法,它们会以第二参数为名称创建文件的副本,同时不会带上文件的扩展名,这种情况是需要我们日常去避免发生的。
shutil模块的方法可以不借助循环结构和文件对象完成文件夹的备份,是一种非常省时省力的文件高级操作的解决方案。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。