目录
一、解压缩 zip 文件
1、基本操作
解压缩
2、zipfile的其他方法
3、解决zip文件解压缩后中文乱码
二、解压缩 rar 文件
1、基本操作
一、解压缩 zip 文件
1、基本操作
基本格式:
zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]])
- filename:待解压的文件路径;
- mode:可选 r,w,a 代表不同的打开文件的方式;r 只读;w 重写;a 添加
- compression:指出这个 zipfile 用什么压缩方法,默认是 ZIP_STORED,另一种选择是 ZIP_DEFLATED;
- allowZip64:bool型变量,当设置为True时可以创建大于 2G 的 zipdir 文件,默认值 True;
解压缩
解压一个zip中的文件,path为解压存储路径,pwd为密码
- extract(member, path=None, pwd=None)
import zipfile
filename = './1-2009100Z024.zip'
folder_extract = './zipdir'
# 默认模式r,只读
zip = zipfile.ZipFile(filename, 'r')
# 返回压缩包里所有文件夹和文件
zip_list = zip.namelist()
for zip_file in zip_list:
print(zip_file)
# 循环解压文件到指定目录
zip.extract(zip_file, folder_extract)
# 关闭文件,必须有,释放内存
zip.close()
解压zip中的所有文件
# 解压zip中的所有文件,path为解压存储路径,pwd为密码
# extractall(path[,pwd])
zipfile.ZipFile(filename).extractall('./zipdir')
2、zipfile的其他方法
判断文件是否是个有效的zipfile
# 判断文件是否是个有效的zipfile
result = zipfile.is_zipfile(filename) # True
存储zip文件中所有子文件的path(相对于zip文件包而言的)
# 返回列表,存储zip文件中所有子文件的path(相对于zip文件包而言的)
result = zipfile.ZipFile(filename).namelist() # ['画册.pptx', '第一PPT.url', 'www.1ppt.com.html']
存储每个zip文件中子文件的ZipInfo对象
# 返回列表,存储每个zip文件中子文件的ZipInfo对象
result = zipfile.ZipFile(filename).infolist() #
print(result) # 列表,所有ZipInfo对象
print(result[0]) # 列表中第一个ZipInfo对象
print(result[0].filename) # 列表中第一个ZipInfo对象的文件名
print(result[0].compress_type) # 列表中第一个ZipInfo对象的压缩方法
print(result[0].file_size) # 列表中第一个ZipInfo对象的源文件大小
print(result[0].compress_size) # 列表中第一个ZipInfo对象的文件压缩后大小
输出结果:
[<ZipInfo filename='画册.pptx' compress_type=deflate external_attr=0x20 file_size=1639595 compress_size=1570551>, <ZipInfo filename='第一PPT.url' compress_type=deflate external_attr=0x20 file_size=123 compress_size=120>, <ZipInfo filename='www.1ppt.com.html' compress_type=deflate external_attr=0x20 file_size=1384 compress_size=653>]
<ZipInfo filename='画册.pptx' compress_type=deflate external_attr=0x20 file_size=1639595 compress_size=1570551>
画册.pptx
8
1639595
1570551
打印输出zip文件的目录结构,包括每个文件的path,修改时间和大小
zipfile.ZipFile(filename).printdir()
输出结果:
File Name Modified Size
画册.pptx 2020-09-09 21:51:14 1639595
第一PPT.url 2015-12-11 14:30:12 123
www.1ppt.com.html 2018-12-09 10:14:30 1384
获取一个子文件的文件对象,可以对其进行read,readline,write等操作
# 获取一个子文件的文件对象,可以对其进行read,readline,write等操作
# open(name[,mode[,pwd]])
file = zipfile.ZipFile(filename).open('www.1ppt.com.html', 'r')
print(file.readline())
file.close()
输出结果:
b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n'
为zip文件设置默认密码
# 为zip文件设置默认密码
zipfile.ZipFile(filename).setpassword(b'123456') # 密码要是byte类型的
未生效?待研究
读取zip中的所有文件,验证他们的CRC校验和。
- 返回第一个损坏文件的名称,如果所有文件都是完整的就返回None;
# 读取zip中的所有文件,验证他们的CRC校验和。返回第一个损坏文件的名称,如果所有文件都是完整的就返回None
result = zipfile.ZipFile(filename).testzip()
print(result)
输出结果:
None
将zip外的文件filename写入到名为arcname的子文件中
- arcname可以带有相对zip包的路径
- 打开方式为w或a,默认是r
# 将zip外的文件filename写入到名为arcname的子文件中(当然arcname也是带有相对zip包的路径的),打开方式为w或a
# write(filename[,arcname[,compression_type]])
zipfile.ZipFile(filename, 'a').write('./test.txt')
输出结果:test.txt文件被添加到1-201026130017.zip压缩包中了
将zip外文件,添加到压缩包的目录中,并重命名
zipfile.ZipFile(filename, 'a').write('./test.txt', '/test/test2.txt')
输出结果:test.txt文件被添加到压缩包的test目录,并且重命名为test2.txt;test目录是自动被创建的;
3、解决zip文件解压缩后中文乱码
要修改zipfile模块的源代码
在zipfile模块中,搜索关键字"cp437",追加2行代码,然后再运行解压缩,中文乱码问题可以解决。
在搜索到的位置下面(搜索到2处),追加一行代码:
追加代码:fname_str = fname_str.encode("cp437").decode('gbk')
追加代码:filename = filename.encode("cp437").decode('gbk')
二、解压缩 rar 文件
- Python 本身不支持 rar 文件的解压,需要先安装相关依赖才可使用;
- 安装依赖模块:pip install --user rarfile
1、基本操作
import rarfile
filename = './1-201026130017.rar'
# mode的值只能为r
rar = rarfile.RarFile(filename, mode='r')
# 得到压缩包里所有的文件
rarfile_list = rar.namelist()
print(rarfile_list)
rar.extractall('./zipdir')
# 关闭文件,必须有,释放内存
rar.close()