本文主要涉及两个模块:
shutil(提供了相比于os更高级的文件处理)、zipfile模块
shutil模块
好,接下来我们介绍一个新的模块shutil。这个独立的模块也是我们Python库下面的一个模块。它呢,帮助我们提供了更多的关于这个文件的拷贝以及压缩这样的一些操作。相当于是对这个OS模块的一个补充。所以呢,今天也主要是介绍拷贝和压缩解压缩这两部分内容。
shutil模块(拷贝和压缩)
- shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等:还可以做文件和文件夹的压缩、解压缩操作。
- os模块提供了对目录或文件的一般操作。shutil模块作为补充,提供了移动、复制、压缩、解压等操作,这些os模块都没有提供。
- shutil模块是Python标准库中的一个模块,提供了许多对文件和文件夹进行操作的函数。它可以用于复制、移动、重命名和删除文件,以及创建、删除和遍历文件夹等操作。下面是一些shutil模块的常用功能:
-
文件操作:
shutil.copy(src, dst)
:复制文件从源路径src到目标路径dst。shutil.move(src, dst)
:移动文件或重命名文件。shutil.copy2(src, dst)
:复制文件,并尽量保留文件元数据(例如访问时间和权限)。shutil.copyfile(src, dst)
:仅复制文件内容,不复制元数据。shutil.copytree(src, dst)
:递归地复制整个目录树。shutil.rmtree(path)
:递归地删除整个目录树。shutil.chown(path, user=None, group=None)
:更改文件或目录的所有者。
-
压缩和解压缩:
shutil.make_archive(base_name, format, root_dir)
:创建压缩文件,支持多种格式(例如zip、tar等)。shutil.unpack_archive(filename, extract_dir)
:解压缩文件到指定目录。
-
其他功能:
shutil.disk_usage(path)
:获取指定路径的磁盘使用情况信息。shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
:查找可执行程序的路径。
-
此外,shutil模块还提供了一些其他辅助函数,如
shutil.get_terminal_size()
用于获取终端的大小,以及shutil.ignore_patterns(*patterns)
用于创建一个函数,用于在复制目录时忽略特定的文件或文件夹模式。 -
总之,shutil模块提供了一组强大而方便的函数,用于处理文件和文件夹操作。它是Python中常用的标准库之一,使得文件操作变得简单和高效。
-
跳转到shutil模块的提供压缩的函数对象,来理解几个参数所代表的含义
-
几个常用的参数所代表的意思
-
base_name 压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存至当前目录,否则保存指定路径
data_bak 保存当前路径
format 压缩包种类 zip tar bztar gztar
root_dir 要压缩的文件路径
owner 用户
group 用户组
logger 用于记录日志
zipfile模块
- 当使用Python进行处理和操作ZIP文件时,可以使用
zipfile
模块。该模块提供了一种简便的方式来创建、读取和解压缩ZIP文件。
下面是zipfile
模块的一些常见功能和用法:
-
打开ZIP文件:
import zipfile # 打开ZIP文件 with zipfile.ZipFile('archive.zip', 'r') as zip_ref: # 在这里进行操作
使用
ZipFile
类的构造函数,你可以打开一个ZIP文件进行操作。第一个参数是ZIP文件的路径,第二个参数是打开模式('r’表示只读)。 -
获取ZIP文件中的文件列表:
with zipfile.ZipFile('archive.zip', 'r') as zip_ref: file_list = zip_ref.namelist() print(file_list)
使用
namelist
方法可以获取ZIP文件中包含的所有文件的列表。 -
解压缩ZIP文件中的文件:
with zipfile.ZipFile('archive.zip', 'r') as zip_ref: zip_ref.extractall('destination_folder')
使用
extractall
方法可以将ZIP文件中的所有文件解压缩到指定的目标文件夹。 -
解压缩ZIP文件中的单个文件:
with zipfile.ZipFile('archive.zip', 'r') as zip_ref: zip_ref.extract('file.txt', 'destination_folder')
使用
extract
方法可以解压缩ZIP文件中的指定文件到指定的目标文件夹。 -
创建ZIP文件并添加文件:
with zipfile.ZipFile('new_archive.zip', 'w') as zip_ref: zip_ref.write('file1.txt') zip_ref.write('file2.txt')
使用
write
方法可以将指定的文件添加到新创建的ZIP文件中。
以上是zipfile
模块的一些基本用法。
实战
# coding: utf-8
# 测试shutil模块的用法,拷贝,压缩及解压缩
import shutil
import zipfile
shutil.copyfile('1.txt', '1_copy.txt') # 拷贝文件
shutil.copytree(r'D:\pythonlearn\01-阶段一:python基础入门\第05周python模块与文件操作\test_shutil\move', '电影') # 拷贝目录(绝对路径下的最后一层目录),注意如果指定拷贝到的路径已存在则会报错FileExistsError,只能拷贝到一个不存在的目录,因为怕覆盖原目录
shutil.copytree('move', '电影', ignore=shutil.ignore_patterns('*.txt', '*.html')) # ignore可以定义那些文件不拷贝(*代表匹配所以文件,加个.txt就是所有的txt后缀的文件)
# 压缩
# 它只能用于压缩,解压缩还需要用到zipfile模块
shutil.make_archive(r'电影/zip_test', 'zip', 'move') # 第一个参数是指定压缩包所在的位置以及名字,第二个是压缩的格式,第三个参数是你要压缩的内容
z1 = zipfile.ZipFile('a.zip', 'w') # 生成一个a.zip的这样一个压缩包,然后接下来往里面打入需要压缩的文件
z1.write(r'1.txt')
z1.write(r'1_copy.txt')
z1.close() # 压完之后关闭
# 解压缩
z2 = zipfile.ZipFile('a.zip', 'r')
z2.extractall('电影')
z2.close()```
输出结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/62570774d17f46fa89ed687c17046c71.png#pic_center)