这篇“Python压缩包处理模块zipfile和py7zr怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python压缩包处理模块zipfile和py7zr怎么使用”文章吧。
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
参数file表示文件的路径;参数mode指示打开zip文件的模式,有三种mode
解压:r
压缩:w
追加压缩:a
默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,‘a’表示追加压缩
下面我们创建一个压缩文件result.zip,并压缩test文件夹下的所有文件
import zipfile import os testdir = "D:\\FTZ\\python_tool\\result\\test" filename = "./result.zip" z = zipfile.ZipFile(filename, 'w') for d in os.listdir(testdir): z.write(d) z.close
当然上面还可以用with的方法打开
import zipfile import os testdir = "D:\\DPI\\python_tool\\result\\test" filename = "./result.zip" with zipfile.ZipFile(filename, 'w') as z: for d in os.listdir(testdir): z.write(d) z.close
import zipfile import os testdir = "D:\\FTZ\\python_tool\\result\\test" filename = "./result.zip" with zipfile.ZipFile(filename, 'r') as z: z.extractall(testdir)
需要注意的是有些压缩包解压是有密码,这时候调用extractall的时候也支持输入密码,在python3中,解压文件的密码参数 pwd 接收的是二进制的值,所以要在前面加一个 b
z.extractall(testdir,pwd=b"ftz")
import zipfile import os testdir = "D:\\DPI\\python_tool\\result\\test" filename = "./result.zip" with zipfile.ZipFile(filename, 'r') as z: files = z.namelist() print(files)
运行结果如下,返回的是一个列表:
import zipfile import os testdir = "D:\\ftz\\python_tool\\result\\test" filename = "./result.zip" with zipfile.ZipFile(filename, 'r') as z: z.setpassword(b'ftz1') #设置zip文档的密码。 z.printdir() #将zip文档内的信息打印到控制台上。 data = z.read('file.yaml') #获取zip文档内指定文件的二进制数据 print(data) info = z.getinfo('file.yaml') #方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持如下属性 print("获取文件名称:",info.filename) print("获取文件最后修改时间:",info.date_time) print("获取压缩类型:",info.compress_type) print("获取压缩后的大小:",info.compress_size) print("获取未压缩的文件大小:",info.file_size) print("判断是否是压缩文件:",zipfile.is_zipfile(filename))
运行结果如下:
File Name Modified Size
data_yaml.yaml 2022-06-25 10:50:42 198
file.yaml 2022-06-25 10:13:46 123
vnfname.txt 2022-01-14 11:27:56 9320
b'\xe4\xb8\x80\xe7\xba\xa7\xe6\xa0\x87\xe9\xa2\x98:\n \xe4\xba\x8c\xe7\xba\xa7\xe6\xa0\x87\xe9\xa2\x981:\n b:1\n c:2\n a:3\n \xe4\xba\x8c\xe7\xba\xa7\xe6\xa0\x87\xe9\xa2\x982:\n f:7\n t:8\n z:9'
获取文件名称: file.yaml
获取文件最后修改时间: (2022, 6, 25, 10, 13, 46)
获取压缩类型: 0
获取压缩后的大小: 123
获取未压缩的文件大小: 123
判断是否是压缩文件: True
[Finished in 0.2s]
当然getinfo也支持其他的属性,下面给出比较全的属性和方法
ZipInfo.filename: 获取文件名称。
ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)
ZipInfo.compress_type: 压缩类型。
ZipInfo.comment: 文档说明。
ZipInfo.extr: 扩展项数据。
ZipInfo.create_system: 获取创建该zip文档的系统。
ZipInfo.create_version: 获取 创建zip文档的PKZIP版本。
ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。
ZipInfo.reserved: 预留字段,当前实现总是返回0。
ZipInfo.flag_bits: zip标志位。
ZipInfo.volume: 文件头的卷标。
ZipInfo.internal_attr: 内部属性。
ZipInfo.external_attr: 外部属性。
ZipInfo.header_offset: 文件头偏移位。
ZipInfo.CRC: 未压缩文件的CRC-32。
ZipInfo.compress_size: 获取压缩后的大小。
ZipInfo.file_size: 获取未压缩的文件大小。
import py7zr with py7zr.SevenZipFile('target.7z', 'w') as archive: archive.writeall('/path/to/base_dir', 'base')
如果想设置密码压缩
import py7zr with py7zr.SevenZipFile('target.7z', 'w', password='secret') as archive: archive.writeall('/path/to/base_dir', 'base')
import py7zr archive = py7zr.SevenZipFile('sample.7z', mode='r') archive.extractall(path="/tmp") archive.close()
也支持with模式
import py7zr with py7zr.SevenZipFile('sample.7z', mode='r') as z: z.extractall() with py7zr.SevenZipFile('target.7z', 'w') as z: z.writeall('./base_dir')
py7z也支持提取某个文件或者符合正则匹配的文件
import py7zr import re filter_pattern = re.compile(r'<your/target/file_and_directories/regex/expression>') with SevenZipFile('archive.7z', 'r') as archive: allfiles = archive.getnames() selective_files = [f for f in allfiles if filter_pattern.match(f)] archive.extract(targets=selective_files)
支持解压缩加密的7z文件
import py7zr with py7zr.SevenZipFile('encrypted.7z', mode='r', password='secret') as z: z.extractall()
以上就是关于“Python压缩包处理模块zipfile和py7zr怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。