首页 > 其他分享 >zipfile一些常用用法

zipfile一些常用用法

时间:2024-09-18 22:22:25浏览次数:11  
标签:文件 常用 ZIP zip zipfile zipf 用法 txt

zipfile 是 Python 标准库中的一个模块,用于创建、读取、写入和管理 ZIP 压缩文件。它可以处理文件压缩和解压缩,支持多种模式。以下是 zipfile 模块的一些常用用法及示例:

1. 创建 ZIP 文件并写入内容

zipfile.ZipFile 支持通过 'w' 模式创建 ZIP 文件并写入文件。

import zipfile

# 创建一个新的 ZIP 文件
with zipfile.ZipFile('example.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.write('file1.txt')  # 添加文件 file1.txt
    zipf.write('file2.txt')  # 添加文件 file2.txt
  • 'w' 表示创建新的 ZIP 文件,如果存在则覆盖。
  • zipfile.ZIP_DEFLATED 是一种压缩方法(常见的还有 zipfile.ZIP_STORED,即不压缩)。

2. 读取 ZIP 文件内容

可以通过 'r' 模式打开 ZIP 文件并查看其中的内容。

with zipfile.ZipFile('example.zip', 'r') as zipf:
    print(zipf.namelist())  # 获取 ZIP 文件中的所有文件名

输出示例:

['file1.txt', 'file2.txt']

3. 解压 ZIP 文件

将 ZIP 文件中的所有文件解压到指定目录。

with zipfile.ZipFile('example.zip', 'r') as zipf:
    zipf.extractall('output_directory')  # 解压到 output_directory 文件夹

你也可以解压单个文件:

with zipfile.ZipFile('example.zip', 'r') as zipf:
    zipf.extract('file1.txt', 'output_directory')  # 解压 file1.txt 到 output_directory

4. 向现有 ZIP 文件追加文件

使用 'a' 模式可以向已经存在的 ZIP 文件中追加文件,而不会删除已有文件。

with zipfile.ZipFile('example.zip', 'a', zipfile.ZIP_DEFLATED) as zipf:
    zipf.write('file3.txt')  # 追加 file3.txt

5. 获取 ZIP 文件中的文件信息

你可以使用 getinfo() 函数获取 ZIP 文件中某个文件的详细信息。

with zipfile.ZipFile('example.zip', 'r') as zipf:
    info = zipf.getinfo('file1.txt')
    print(info.file_size)  # 打印文件大小
    print(info.compress_size)  # 打印压缩后大小

6. 解压 ZIP 文件中的数据到内存中

你可以使用 open() 方法将文件解压到内存中,而不需要写入硬盘。

with zipfile.ZipFile('example.zip', 'r') as zipf:
    with zipf.open('file1.txt') as file:
        content = file.read()
        print(content)  # 读取 file1.txt 文件的内容

7. 使用 infolist() 获取所有文件的详细信息

infolist() 返回一个包含所有文件信息的列表。

with zipfile.ZipFile('example.zip', 'r') as zipf:
    for info in zipf.infolist():
        print(f"File Name: {info.filename}")
        print(f"File Size: {info.file_size}")
        print(f"Compress Size: {info.compress_size}")

8. 检查文件是否在 ZIP 文件中

使用 testzip() 可以检查 ZIP 文件中的文件是否损坏。

with zipfile.ZipFile('example.zip', 'r') as zipf:
    corrupt_file = zipf.testzip()
    if corrupt_file:
        print(f"Corrupted file found: {corrupt_file}")
    else:
        print("All files are good.")

9. 创建带有目录结构的 ZIP 文件

如果希望保留文件夹结构,你可以将文件夹递归压缩:

import os

def zipdir(path, zipf):
    for root, dirs, files in os.walk(path):
        for file in files:
            full_path = os.path.join(root, file)
            arcname = os.path.relpath(full_path, path)  # 保留相对路径
            zipf.write(full_path, arcname)

with zipfile.ZipFile('example_with_dirs.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipdir('my_folder', zipf)

10. 删除 ZIP 文件中的某个文件

标准库 zipfile 模块不支持直接删除压缩包中的文件。你可以通过以下方式实现:

  1. 创建一个新的 ZIP 文件。
  2. 将需要保留的文件从旧 ZIP 文件复制到新 ZIP 文件。
  3. 不包括需要删除的文件。
import zipfile

def remove_file_from_zip(zip_path, file_to_remove):
    temp_zip_path = zip_path + '.tmp'

    with zipfile.ZipFile(zip_path, 'r') as zip_in:
        with zipfile.ZipFile(temp_zip_path, 'w', zipfile.ZIP_DEFLATED) as zip_out:
            for item in zip_in.infolist():
                if item.filename != file_to_remove:
                    zip_out.writestr(item, zip_in.read(item.filename))

    os.replace(temp_zip_path, zip_path)  # 用新的 zip 文件替换旧的

remove_file_from_zip('example.zip', 'file1.txt')

总结

zipfile 模块提供了丰富的功能,支持文件压缩、解压、读取文件信息等操作。以下是一些常见用法的总结:

  • 创建、追加 ZIP 文件:zipfile.ZipFile('filename.zip', 'w'/'a')
  • 解压 ZIP 文件:extractall()extract()
  • 查看文件列表:namelist()infolist()
  • 读取文件内容:open()read()
  • 检查文件是否损坏:testzip()

这些基本用法涵盖了大部分 ZIP 文件操作的需求。


zipfile.ZIP_DEFLATEDzipfile 模块中用于指定压缩方法的常量之一,表示使用 DEFLATE 算法来压缩文件。DEFLATE 是一种广泛使用的压缩算法,也是 ZIP 文件的默认压缩算法。

在创建 ZIP 文件时,ZIP_DEFLATED 选项会压缩文件以减少存储空间,而不是仅仅将文件存储到 ZIP 文件中。

常见压缩方法:

  1. **zipfile.ZIP_DEFLATED**:

    • 使用 DEFLATE 压缩算法,最常用的压缩方法,通常可以大大减少文件大小。
    • 要求 zlib 模块支持(Python 内置支持 zlib)。
  2. **zipfile.ZIP_STORED**:

    • 不进行压缩,只是将文件原样存储在 ZIP 文件中。
    • 如果你不需要压缩文件,可以使用此方法。
  3. **zipfile.ZIP_BZIP2**:

    • 使用 BZIP2 压缩算法,压缩率比 DEFLATE 更高,但速度较慢。
    • 需要 Python 3.3 及以上版本,并且依赖于 bz2 模块。
  4. **zipfile.ZIP_LZMA**:

    • 使用 LZMA 压缩算法,压缩率最高,但速度最慢。
    • 需要 Python 3.3 及以上版本,并且依赖于 lzma 模块。

使用示例:

import zipfile

# 使用 ZIP_DEFLATED 压缩算法创建 ZIP 文件
with zipfile.ZipFile('compressed.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.write('file1.txt')  # 压缩并添加 file1.txt
    zipf.write('file2.txt')  # 压缩并添加 file2.txt

总结:

  • zipfile.ZIP_DEFLATED 使用了高效的 DEFLATE 算法,能在文件压缩和解压时提供较好的平衡。
  • 这是大多数情况下默认和推荐使用的压缩方式,因为它压缩效果好,解压速度也较快。

标签:文件,常用,ZIP,zip,zipfile,zipf,用法,txt
From: https://blog.51cto.com/u_16420155/12049217

相关文章

  • 『杂项』Linux 常用指令
      不会吧不会吧不会还有Oier不会Linux指令要写一篇博客记一下  今年S组人数骤增,遂ctrl+cv出本篇博客以获得两分(Linux常用指令文件和目录管理命令ls:列出当前目录中的文件和子目录。pwd:显示当前工作目录的路径。cd:切换工作目录。mkdir:创建新目录。rmdi......
  • 《深度学习》PyTorch 常用损失函数原理、用法解析
    目录一、常用损失函数1、CrossEntropyLoss(交叉熵损失)        1)原理    2)流程        3)用法示例2、L1Loss(L1损失/平均绝对误差)    1)原理        2)用法示例3、NLLLoss(负对数似然损失)    1)原理    2)用法示例......
  • Unity UI控件用法汇总
    利用LoopListView实现Banner循环列表,且默认中间节点为默认节点:  1.给ScrollRect节点添加LoopListView组件,并勾选ItemSnapEnable为true。  2.通过LoopListView.InitListView初始化时,totalCount需要传-1.  3.OnGetItemByIndex的回调参数index以(Int32.MinValue,Int32.MaxVa......
  • Windows常用快捷键(学习笔记)
    键盘功能键:Tab,Shift,Ctrl,Win,空格,Enter,↑↓←→常用功能:Ctrl+Shift  ----  切换输入法Alt+F4----关闭窗口Ctrl+C ----复制Ctrl+V ----粘贴Ctrl+A ----全选Ctrl+X ----剪切Ctrl+Z ----撤销Ctrl+S ----保存Ctrl+D----功能:打开“添加收......
  • MySQL数据库select语句详细用法三(子查询及其select练习)
    SELECT*FROMstudent2WHEREage> (SELECTageFROMstudent2WHERENAME='欧阳丹丹')首先解释一下括号中的代码,意思是在查询student2中的name为欧阳丹丹的人的名字,然后解释一下整个语句的意思:在括号中查询出来的字段中再次进行查询在student2中age大于name为欧阳丹丹的......
  • linux常用命令
    格式:命令选项参数命令参数选项1.1ls命令ls               列出当前路径下所有文件ls-a      列出当前路径下所有文件(包括隐藏文件linux中隐藏文件都是以点开头的)ls-l          列出当前路径下所有文件(包括文件的详细信息......
  • 面试官:Vue常用的修饰符有哪些有什么应用场景
    一、修饰符是什么在程序世界里,修饰符是用于限定类型以及类型成员的声明的一种符号在Vue中,修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理vue中修饰符分为以下五种:表单修饰符事件修饰符鼠标按键修......
  • 常用学习、面试复习、开发网站
    JavaGuide二哥的Java进阶之路开发者客栈:Java后端面试题大全easyexcelMyBatis-PlusHuToolSpring官网网站kimi文心一言......
  • 这个隐藏功能,90%的人还不知道!可一键直达40+AI应用!含Kimi、腾讯元宝、秘塔AI等常用AI工
    大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年+,也一名AIGC爱好者,持续分享更多前沿的「AI工具」和「AI副业玩法」,欢迎一起交流~又是被粉丝感动的一天。昨天一位读者加到我,是一名60岁的退休阿姨。因为不喜欢太清闲的生活,想让自己的人生有意义一些,所以想做做副业,打发时间,......
  • Metasploit Framework (MSF) 使用指南 - 第一篇:介绍与基础用法
    引言MetasploitFramework(MSF)是一款功能强大的开源安全漏洞检测工具,被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞,并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用,还包括信息收集、漏洞探测和后渗透攻击等多个环节,因此被安全社区誉为“可以黑掉整个宇宙”的工具。......