解压缩模块 zipfile

解压缩模块 zipfilezipfile一、创建一个ZipFile对象,表示一个zip文件classzipfile.ZipFile(file[,mode[,compression[,allowZip64]]])参数file表示文件的路径或类文件对象(file-likeobject)参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,’w’表示…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

zipfile

一、创建一个ZipFile对象,表示一个zip文件

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

参数file表示文件的路径或类文件对象(file-like object)

参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,’w’表示新建一个zip文档或覆盖一个已经存在的zip文档,’a’表示将数据附加到一个现存的zip文档中。

参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。

如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。

二、常用功能

zipfile里有两个非常常用的class, 分别是ZipFile和ZipInfo,ZipFile用来创建和读取zip文件,ZipInfo是存储的zip文件的每个文件的信息的

1、zipfile.is_zipfile(filename)

判断一个文件是否为压缩文件

2、ZipFile.namelist()

获取zip文档内所有文件的名称列表

import zipfile
f = zipfile.ZipFile(filename, 'r')    #r表示是读取zip文件,w或a是创建一个zip文件

for f_name in f.namelist(): #.namelist() 返回压缩包内所有文件名的列表
    print(f_name)

3、ZipFile.extract(member[, path[, pwd]])

将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;参数pwd为解压密码

import zipfile, os
f = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip'))  #拼接成一个路径
for file in f.namelist():
  f.extract(file, r'd:/Work')     #在d:/Work中解压文件
f.close()

三、循环解压

该代码能遍历压缩包中的文件夹,遇到子压缩包,能够再次解压,直到解压完所有子压缩包。

“参数”的作用是:不删除原始压缩包,而删除所有子压缩包

import os, zipfile


class UnZip():
    def scan(self, source_dir):
        files = os.listdir(source_dir)
        n = 0
        for sub_file in files:
            n += 1
            sub_file_path = os.path.join(source_dir, sub_file)
            if os.path.isdir(sub_file_path):
                self.scan(sub_file_path)
            else:
                if sub_file_path.lower().endswith('.zip'):
                    print('hi')
                    output_sub_dir = sub_file_path[:-4]
                    self.unzip(sub_file_path, output_sub_dir)
                    self.scan(output_sub_dir)
                    if n != 1:
                        os.remove(sub_file_path)

    def unzip(self, file, folder):
        fz = zipfile.ZipFile(file, 'r')
        for sub_file_name in fz.namelist():
            fz.extract(sub_file_name, folder)


if __name__ == '__main__':
    UnZip().scan(r'D:\Projects\CA\script')

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192454.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 服务器端配置nfs(配置samba服务器步骤)

    一、NFS服务简介  NFS是NetworkFileSystem的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。  NFS的基本原则是“容许不同的客户端及服务端

    2022年4月13日
  • linux常见问题_linux安装方式

    linux常见问题_linux安装方式Normal07.8磅02falsefalsefalseMicrosoftInternetExplorer4

    2022年8月21日
  • 版本号命名规范及原则是什么_软件开发版本号定义方式

    版本号命名规范及原则是什么_软件开发版本号定义方式1命名规范主版本号.子版本号.修正版本号2命名原则(1)项目初版本时,版本号可以为0.1.0;(2)当项目在进行了局部修改或bug修正时,主版本号和子版本号都不变,修正版本号加1;(3)当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加1,修正版本号复位为0;(4)当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版…

    2022年9月11日
  • 服务器主板插显卡进不了系统,关于换了显卡后进不了系统的问题「建议收藏」

    服务器主板插显卡进不了系统,关于换了显卡后进不了系统的问题「建议收藏」显卡常见故障诊断如下(1)显卡接触不良故障:显卡接触不良通常会引起无法开机且有报警声或系统不稳定死机等故障。造成显卡接触不良的原因主要是显卡金手指被氧化、灰尘、显卡品质差或机箱挡板问题等。对于金手指被氧化造成的接触不良,可以使用橡皮擦拭金手指来解决;对于灰尘引起的接触不良,一般清除灰尘后即可解决;对于硬件品质造成的接触不良,通常通过替换法来检测,一般采用更换显卡来解决;对于机箱挡板问题造成的接触不…

    2022年6月18日
  • python输出保留小数位_python保留两位小数补0

    python输出保留小数位_python保留两位小数补0前言保留小数位是我们经常会碰到的问题,尤其是刷题过程中。那么在python中保留小数位的方法也非常多,但是笔者的原则就是什么简单用什么,因此这里介绍几种比较简单实用的保留小数位的方法:方法一:format函数>>>print(‘{:.3f}’.format(1.23456))1.235>>>print(format(1.23456,’.2f’))1.23正如上面代码所示,format有不同用…

    2022年8月12日
  • flask中jsonify和json.dumps的区别「建议收藏」

    flask中jsonify和json.dumps的区别「建议收藏」flask提供了jsonify函数供用户处理返回的序列化json数据,而python自带的json库中也有dumps方法可以序列化json对象,那么在flask的视图函数中return它们会有什么不同之处呢?想必开始很多人和我一样搞不清楚,只知道既然框架提供了方法就用,肯定不会错。但作为开发人员,我们需要弄清楚开发过程中各种实现方式的特点和区别,这样在我们面对不同的需求时才能做出相对合理的选择,而…

    2022年5月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号