shutil模块中包含一些函数,使可在python中复制、移动、改名、删除文件。
复制文件和文件夹
shutil.copy(source,destination):将路径source处的文件复制到路径destination处的文件夹(source,destination均为字符串);若destination是一个文件名,将作为被复制文件的新名字。返回一个字符串,表示被复制文件的路径。
shutil.copytree(source,destination):将路径source处的文件夹,包括所有文件及子文件夹复制到destination处的文件夹,返回一个字符串,是新复制的文件夹的路径
文件和文件夹的移动和改名
shutil.move(source,destination):将路径source处的文件夹移动到路径destination,并返回新位置的绝对路径的字符串
若destination指向一个文件夹,source文件移动到destination中,并保持原来的文件名;若destination中同名文件将被覆盖
若destination指定一个文件名,source文件移到到destination中,并改名
永久删除文件和文件夹
利用os模块中的函数,可删除一个文件或一个空文件夹,利用shutil模块,可删除一个文件夹及其所有内容
os.unlink(path):删除path处文件
os.rmdir(path):删除path处文件夹,且文件夹必须为空,其中没有任何文件和文件夹
shutil.rmtree(path):删除path处的文件夹,包含的所有文件和文件夹都将被删除
python内建的shutil.rmtree()不可恢复地删除文件和文件夹,所以用起来有危险。更好的使用方法是使用第三方的send2trash模块
send2trash会将文件夹和文件发送到计算机的回收站而不是永久的删除
可send2trash.send2trash()删除文件和文件夹。
send2trash只能将文件送到回收站却不能从中恢复
遍历目录树
os.walk()传入一个字符串值,即一个文件夹的路径,可在for循环中使用os.walk()来遍历目录树
os.walk()在循环的每次迭代中返回3个值:
1、当前文件夹名称的字符串
2、当前文件夹中子文件夹的字符串的列表
3、当前文件夹中文件的字符串的列表
所谓当前文件夹指for循环当前迭代的文件夹;程序的当前工作目录不会因为os.walk()而改变
zipfile模块
读取zip文件
要读取ZIP文件的内容,首先必须创建一个ZipFile对象(可用zipfile.ZipFile(),向其传入一个字符串表示.zip文件的文件名)
注:zipfile是python模块的名称,ZipFile是函数的名称
ZipFile对象有一个namelist()方法,返回ZIP文件中白喊的所有文件和文件夹的字符串的列表。这些字符串可以传递给ZipFile对象的getinfo()方法,返回一个关于特定文件的ZipInfo对象。ZipInfo对象有自己的属性,如字节数file_size和compress_size,分别表示原来文件大小和压缩后文件大小。ZipFile对象表示整个归档文件,ZipInfo对象则保存该归档文件中每个文件的有用信息
从zip文件中解压缩
ZipFile对象的extractall()方法从ZIP文件中解压缩所有的文件和文件夹,放到当前的工作目录中
ZipFile对象的extract()方法从ZIP文件中解压缩单个文件
创建和添加到ZIP文件
要创建ZIP文件,必须以写模式打开ZipFile对象,即传入’w'作为第二个参数。
若向ZipFile对象的write()方法传入一个路径,python会压缩该路径所指文件,将它加到zip文件中。write()第一个参数是一个字符串,代表要添加的文件名,第二个参数是“压缩类型”参数,告诉计算机使用什么样的算法压缩文件,可将其设置为zipfile.ZIP_DEFLATED(指定deflate压缩算法,对各类型数据都很有效)
注:写模式将覆盖之前内容,若需添加压缩问价可用添加模式打开, 即'a'