• 您当前位置:网站首页 >> Python学习 >> Python 读取、创建和解压zip压缩包文件
  • Python 读取、创建和解压zip压缩包文件

    iCoA首席特工 逍遥峡谷 发布:2019-12-24 更新:2020-01-07 浏览0条评论
    内容简介

    相关关键词:Python   压缩包   zip   解压文件   压缩文件  

    本文链接:https://www.icoa.cn/a/883.html

    本站文章如非注明皆为原创,未经允许禁止转载。如有问题可以给我留言或发邮件。

    有时候我们经常用到.zip压缩包文件,而Python内置了zipfile模块可以处理zip压缩文件。

    读取压缩包内的文件名称

    zipfile.ZipFile() / .namelist() 注意大小写问题

    # 引入zipfile模块
    import zipfile
    with zipfile.ZipFile('demo.zip','r') as zzz:
        print(zzz.namelist())
    # 运行结果:['file1.txt', 'file2.txt', 'temp_file.png']

    如果压缩包里的文件名有中文,则容易出现乱码,所以这时候,需要对中文文件名进行转码:

    with zipfile.ZipFile('demo.zip','r') as zzz:
        for f_name in zzz.namelist():
            print(f_name.encode('cp437').decode('gbk'))
    ''' 运行结果:
    file1.txt
    file2.txt
    temp_file.png
    数据分析.PNG'''

    读取压缩包内文件信息

    .getinfo() 读取文件信息

    with zipfile.ZipFile('demo.zip','r') as zzz:
        for f_name in zzz.namelist():
            f_info = zzz.getinfo(f_name)
            f_name = f_name.encode('cp437').decode('gbk')
            # 输出该文件的文件大小.file_size和压缩之后的大小compress_size
            print(f_name,f_info.file_size,f_info.compress_size)
    ''' 运行结果:
    file1.txt 98 47
    file2.txt 98 47
    temp_file.png 22061 18211
    数据分析.PNG 178210 177931'''
    # 除了大小之外.getinfo()还可以读取出filename、compress_type、external_attr属性。

    从压缩包里解压文件

    .extract() 可以把某个文件从.zip压缩包里解压出来

    格式:.extract('要解压的zip文件名','解压到的位置') 如果不填写解压的位置,则默认解压到当前目录

    with zipfile.ZipFile('demo.zip','r') as zzz:
        zzz.extract('file1.txt')
    # 把压缩包里的file1.txt解压到当前目录
    # 如果压缩包里出现中文,则需要进行转码(所以在用Python压缩文件和解压的时候最好不要出现中文路径和文件名)


    如果被解压的文件名里有中文,则可以先解压,然后再重命名。

    import zipfile,os
    # 需要用到os模块
    with zipfile.ZipFile('demo.zip', 'r') as z:
        f_name = '添加数据.png'
        # 把压缩包里的 添加数据.png 文件解压出来
        f_temp = f_name.encode('gbk').decode('cp437')
        z.extract(f_temp,'D:\\Temp\\')
        # 解压到 D:\Temp\
        os.rename(f'D:\\Temp\\{f_temp}',f'D:\\Temp\\{f_name}')
        # 重新命名为中文


    .extractall() 可以把压缩包里的所有文件解压到指定目录

    格式:.extractall('解压到的位置') 如果不写则解压到当前目录

    with zipfile.ZipFile('demo.zip','r') as zzz:
        zzz.extractall('文件夹1')
    # 把所有文件解压到 文件夹1 下面


    解压带密码的压缩包

    格式:.extractall('解压到的位置',pwd=b'密码')

    with zipfile.ZipFile('Python.zip','r') as zzz:
        zzz.extractall('解压到这里',pwd=b'123456')

    所以这里我们一个破解密码的可能,就是如果有一个密码列表,可以挨个试列表中的字符。或者知道密码的位数,就可以用遍历的方式暴力破解。


    创建.zip压缩包

    创建zip压缩包文件使用‘w’参数,同时用到.write()函数将指定文件添加到压缩包,使用方式是.write('被压缩的文件名或路径')。

    注意,参数为'w'的话,如果存在同名sample.zip文件的话,会被新创建的覆盖掉。

    with zipfile.ZipFile('sample.zip', 'w') as z:
        # 创建文件夹的话,参数为‘w’
        z.write('file1.txt')


    创建zip压缩包的时候,把多个文件批量添加到压缩包里,可以把文件名(路径)赋值给一个列表,然后用遍历的方式,把文件批量添加到压缩包里。

    f_list = ['file1.txt','file2.txt','temp_file.png','./py/hello.py']
    with zipfile.ZipFile('sample.zip','w') as z:
        for f_name in f_list:
            z.write(f_name)


    向已有的zip压缩包里添加文件

    上面提到,如果用'w'参数的话,那么向压缩包里添加文件,则会覆盖之前的压缩包。而向已有的压缩包添加文件,而不是替换这个压缩包的话,需要使用'a'参数,其他方法相同。

    f_list = ['temp_folder.png','./py/game.py']
    with zipfile.ZipFile('sample.zip','a') as z:
        for f_name in f_list:
            z.write(f_name)

    如果压缩包里有同名文件,可以添加成功,但是会报警,提示1515: UserWarning: Duplicate name: 'temp_folder.png'.


    更多Python相关文章点击:Python学习日志目录

    本文链接:https://www.icoa.cn/a/883.html
    关键词: Python   压缩包   zip   解压文件   压缩文件  


    如果您愿意支持本站,欢迎点击打赏哦~



    下一篇:Python 使用openpyxl模块打开和读取 Excel 表格内容

    上一篇:Python 创建、复制、移动、删除和重命名文件和文件夹


    - 相关文章 -


    Python 基础知识入门演示 - 2017-12-31

    Python 数字与数字型运算 - 2020-09-08

    Python 基础知识之数据类型 - 2020-09-07

    Python 学习中非常好用的编辑器 Sublime Text 3 - 2020-09-07

    Python 基础知识之变量 - 2020-09-03

    Python 详细安装步骤图解 - 2020-09-01

    Python 数据分析模块 Pandas 之 DataFrame 数据 - 2020-02-09

    Python 数据分析模块 Pandas 之 Series 数据 - 2020-02-05


    - 文章评论 -




    5311

    [由于政策原因,您的留言如果提交成功后,需要审核才能展示,请改天再来查看,请不要重复提交,谢谢支持!]

    - 最新评论[0条评论] -


    [>>>点击查看更多评论]

    版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 | 逍遥峡谷 · 酷品优选
    Copyright©Interstellar Central Occult Agency (I.C.O.A)
    本局纯属虚构,如有雷同,纯属巧合

    冀公网安备13011102001055号 · 冀ICP备06033848号