常用标准库
在我们常用的系统和Linux系统中支持的压缩包格式有很多,包括但不限于以下几种:rar、zip、tar,以下标准库的作用是用于压缩和压缩的压缩包解压缩其中一些格式。
压缩格式
模块操作 压缩包使用类来操作。 a 四种操作模式。基本步骤大致分为三个步骤:打开文件、操作文件、关闭文件。上下文自动化可以使用 with 语法来完成。
注1:rwxa也有四种模式,也就是说文件操作中也会有游标指针的概念。
注2:在 中,几乎所有与文件相关的操作都是三个步骤:打开、操作、关闭。
参数说明
语法:(file, mode=’r’, =, =True)
参数含义
文件
文件路径
模式
操作含义与文件操作中相同,默认为r。
压缩方式,默认是。
操作的压缩文件大小大于2G时应该为True,默认为True,不用管。
操作含义模式含义
w
创建一个新的存档文件。
r
读取现有的 zip 文件。
一个
将文件压缩成现有的 zip 文件。
压缩方式
从上面的参数可以看出,默认的压缩方式是 .其实在模块中定义了一些压缩方法常量,最常用的有以下两种:
ZIP_STORED = 0 # 打包归档(不压缩)
ZIP_DEFLATED = 8 # 压缩文件(压缩)
注意,压缩方式是指将文件写入到压缩包中使用的方式,所以如果文件解压,则无需指定此压缩方式。
常用方法write——指定要写入压缩包的文件(压缩文件)
语法:write(, =None)
语法:write( file) Path,写入压缩包后的路径和名称(默认原名))
如果文件写入文件夹,文件夹的内容不会一起写入。
close — 关闭对象(保存文件)
这是我要压缩的文件夹。
使用压缩。
import zipfile
# 文件路径
zip_file_path = r'D:test.zip' # 压缩包路径
file_path = r'D:10-中日欧美信息解析' # 被压缩文件
# 默认使用ZIP_STORED
zf = zipfile.ZipFile(zip_file_path, 'w')
# 写入文件(文件夹的话,不会将文件夹中的文件一同写入)
zf.write(file_path)
# 关闭文件
zf.close()
可以看到,如果直接压缩文件夹,里面的文件是不会一起压缩的。
迭代地将文件夹中的所有文件写入存档。
import os
import zipfile
def writeZip(zf, file, arc_path=None):
"""迭代压缩文件夹"""
# 设置压缩路径
if arc_path is None:
arc_path = rf'{os.path.basename(file)}'
# 先压缩本文件
zf.write(file, arc_path)
# 如果是文件夹
if os.path.isdir(file):
# 获取它所有的子文件
inner_files = os.listdir(file)
# 将所有的子文件压缩
for inner_file in inner_files:
inner_file = f'{file}{os.sep}{inner_file}'
arc = fr'{arc_path}{os.path.basename(inner_file)}'
writeZip(zf, inner_file, arc)
# 文件路径
zip_file_path = r'D:test.zip' # 压缩包路径
file_path = r'D:10-中日欧美信息解析' # 被压缩文件
# 默认使用ZIP_STORED
zf = zipfile.ZipFile(zip_file_path, 'w')
# 写入文件(自定义一个函数,迭代压缩文件夹)
writeZip(zf, file_path)
# 关闭文件
zf.close()
现在可以看到,虽然所有文件都写入了压缩包,但是该方法并没有压缩文件。
改用压缩文件的方法。
import os
import zipfile
def writeZip(zf, file, arc_path=None):
"""迭代压缩文件夹"""
# 设置压缩路径
if arc_path is None:
arc_path = rf'{os.path.basename(file)}'
# 先压缩本文件
zf.write(file, arc_path)
# 如果是文件夹
if os.path.isdir(file):
# 获取它所有的子文件
inner_files = os.listdir(file)
# 将所有的子文件压缩
for inner_file in inner_files:
inner_file = f'{file}{os.sep}{inner_file}'
arc = fr'{arc_path}{os.path.basename(inner_file)}'
writeZip(zf, inner_file, arc)
# 文件路径
zip_file_path = r'D:test.zip' # 压缩包路径
file_path = r'D:10-中日欧美信息解析' # 被压缩文件
# 使用ZIP_DEFLATED压缩
zf = zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED)
# 写入文件(自定义一个函数,迭代压缩文件夹)
writeZip(zf, file_path)
# 关闭文件
zf.close()
可以看到文件是内部压缩写入的。
解压
有两种解压方法。注意:解压是读取文件,操作模式要改为r。
方法说明
解压缩单个指定文件。
解压所有文件。
语法:(, path=None, pwd=None)
语法:(指定文件(压缩包中的路径)、解压位置(默认为当前工作目录)、指定密码(部分压缩包有密码,格式为字节流))
语法:(path=None, pwd=None)
语法:(解压位置,密码)
注意:解压后的文件和路径中同名的文件夹会报错,因为文件无法重置文件夹。
–迭代返回压缩包中的文件
import zipfile
with zipfile.ZipFile(r'D:test.zip') as zf:
res = zf.namelist()
print(res)
# ['10-中日欧美信息解析/', '10-中日欧美信息解析/1-代码/', ...]
–迭代返回压缩包中的文件信息
如文件权限等
–查看压缩包中文件的信息
查看压缩包中的文件信息,如文件大小、创建日期等,默认查看所有文件。
语法:(文件=无)
tar包和gz、bz的使用2、xz格式
更类似于文件操作,只是压缩方式略有不同。
用过Linux系统的人都知道tar是Linux的一种打包方式。打包成tar包后,可以使用其他压缩程序进行压缩。最常用的压缩方式是gzip,压缩率最高的是bzip2,还支持另一种比较小的xzip格式。
主要的操作方法是..open(),可以直接.open()。
语法:open(name, mode=’r’)
我在学习的时候,老师也教过=’UTF-8’这个参数,但是文件操作需要什么编码格式呢?感觉他是为了方便直接从文件操作的代码里复制过来的,然后没有删掉。
操作tar包
模式主要是r、w、a、x,加上add方法用来写文件,还是用close方法退出。
添加(名称,)
add(压缩文件,压缩别名)
注意压缩后的别名不能以路径分隔符结尾,否则只能创建文件夹。
import tarfile
with tarfile.open('test.tar', 'w') as tf:
tf.add('test.txt')
压缩
压缩的方式主要是改变模式,在rwx的基础上添加各种压缩方式,变成:r:gz、w:bz2、x:xz等样式,然后压缩tar刚刚创建的包,当然你也可以直接把文件压缩成压缩包。
注意a模式不能配备任何压缩模式,因为gzip、bzip2、xzip不能直接追加文件,所以如果要追加文件,解压tar包,然后追加压缩.
import tarfile
# tar包以gzip格式压缩
with tarfile.open('test.tar.gz', 'w:gz') as tf:
tf.add('test.tar')
解压
解压方式与.
方法含义
解压指定文件
解压所有文件
–返回压缩包中的文件(列表)删除压缩包中的文件
并且不支持删除压缩包中的文件,所以如果需要删除压缩包中的文件,可以将压缩包中的文件解压,删除里面的文件,然后重新压缩。
暂无评论内容