首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解压缩模块 zipfile

解压缩模块 zipfile

作者头像
全栈程序员站长
发布2022-09-30 20:50:42
发布2022-09-30 20:50:42
1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

zipfile

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

代码语言:javascript
代码运行次数:0
运行
复制
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文档内所有文件的名称列表

代码语言:javascript
代码运行次数:0
运行
复制
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为解压密码

代码语言:javascript
代码运行次数:0
运行
复制
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()

三、循环解压

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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.cn/192454.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • zipfile
    • 一、创建一个ZipFile对象,表示一个zip文件
    • 二、常用功能
      • 三、循环解压
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档