资讯专栏INFORMATION COLUMN

Python压缩包解决控制模块zipfile和py7zr实际操作编码

89542767 / 843人阅读

  现在对文件信息压缩和解压缩较为常见的文件格式便是zrar格式和7z文件格式,本文关键讲了Python压缩包解决控制模块zipfile和py7zr,必须的小伙伴可以借鉴一下


  现在对文件信息压缩和解压缩较为常见的文件格式便是zrar格式和7z文件格式,现在就以篇文章来融汇贯通会该2个压缩文件格式操作。


  一:zipfile的常见实际操作


  1,压缩包


  zipfile.ZipFile(file[,mode[,compression[,allowZip64]]])


  主要参数file表示文档的路线;主要参数mode标示开启zip文件的方式,主要有三种mode


  缓解压力:r


  缩小:w


  增加缩小:a


  初始值为'r',表明读早已存有的zip文件,还可以为'w'或'a','w'表明新创建一个zip文档或涵盖1个早已存有的zip文档,‘a’表明增加缩小


  下面我们就构建一个压缩包result.zip,并缩小test文件夹中的所有文件夹


  import zipfile
  import os
  testdir="D:FTZpython_toolresulttest"
  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:DPIpython_toolresulttest"
  filename="./result.zip"
  with zipfile.ZipFile(filename,'w')as z:
  for d in os.listdir(testdir):
  z.write(d)
  z.close

  2,解压缩文件


  import zipfile
  import os
  testdir="D:FTZpython_toolresulttest"
  filename="./result.zip"
  with zipfile.ZipFile(filename,'r')as z:
  z.extractall(testdir)


  需要注意的是有些压缩包解压是有密码,这时候调用extractall的时候也支持输入密码,在python3中,解压文件的密码参数pwd接收的是二进制的值,所以要在前面加一个b

  z.extractall(testdir,pwd=b"ftz")


  3,列出压缩包里的所有文件


  import zipfile
  import os
  testdir="D:DPIpython_toolresulttest"
  filename="./result.zip"
  with zipfile.ZipFile(filename,'r')as z:
  files=z.namelist()
  print(files)

  运行结果如下,返回的是一个列表:


  4,其他常用的方法


  import zipfile
  import os
  testdir="D:ftzpython_toolresulttest"
  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'xe4xb8x80xe7xbaxa7xe6xa0x87xe9xa2x98:nxe4xbax8cxe7xbaxa7xe6xa0x87xe9xa2x981:n b:1n c:2n a:3nxe4xbax8cxe7xbaxa7xe6xa0x87xe9xa2x982:n f:7n t:8n 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:获取未压缩的文件大小。


  二:py7zr的常用操作


  1,压缩文件


  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')


  2,解压缩文件


  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()


  综上所述,这篇文章就给大家介绍到这里了,希望可以给各位读者带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129071.html

相关文章

  • Python 编程速成

    摘要:同时无论在哪种平台上,都可以用进行系统编程。这样导入模块并使用生成随机数中的模块提供了生成随机数的函数。生成的随机数介于和之间。可以从自己定义的范围中生成一个随机数,如下所示操作日期和时间你可以从日期中提取所需的值,如下所示。 翻译:疯狂的技术宅https://likegeeks.com/python-... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 ...

    187J3X1 评论0 收藏0
  • Python暴力破解zip文件口令

    摘要:通过内置的模块实现对文件的解压,加点料完成口令破解模块基本使用使用压缩文件创建一个文件对象,压缩是需要把改为将文件写入文件中,即将文件压缩将文件对象关闭使用解压文件解压准备阶段首先你需要一个压缩文件,并且给它加上密码,样子长成这样然后你就成 通过Python内置的zipfile模块实现对zip文件的解压,加点料完成口令破解 zipfile模块基本使用 使用zipfile压缩文件 imp...

    hufeng 评论0 收藏0
  • python标准库学习之zipfile模块

    摘要:模块里有两个非常重要的分别是和。返回一个对象,它包括文件的详细信息。将文档内的指定文件解压到当前目录。为文件路径,为添加到文档之后保存的名称参数表示压缩方法,它的值可以是或。预留字段,当前实现总是返回。 ZipFile模块里有两个非常重要的class, 分别是 ZipFile和ZipInfo。ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文...

    Magicer 评论0 收藏0
  • 直接从压缩中读取,遍历CSV文件

    摘要:最近这段时间遇到了一个问题,直接打开压缩包文件后,用读后,用进行遍历时,会提示。出问题的代码是这样的的英文缩写是分析原因后,主要是因为读进来的内容是类型,读进去的类型也是,造成无法遍历。 最近这段时间遇到了一个问题,直接打开压缩包文件后,用csv.reader读后,用for in 进行遍历时,会提示:iterator should return strings not bytes (...

    FrancisSoung 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<