Python 神器 zipfile 模块:一键解锁解压、备份数据超能力

liftword3个月前 (03-03)技术文章26

Python 提供了一个 zipfile 模块,可简化 ZIP 压缩文件操作。在本文中,将介绍在 Python 中使用 zipfile 模块解压缩文件的方法。

可以使用 Python 脚本来自动备份重要数据。通过使用 zipfile 模块,将多个文件和目录压缩到备份路径,实现数据备份。

创建 ZIP 压缩文件

zipfile.ZipFile() 方法:

以指定的模式打开 ZIP 文件。模式包括读取 ('r')、写入 ('w')、附加 ('a') 等。如果压缩文件不存在则自动创建文件。

zipfile.write() 方法:

将文件写入 ZIP 压缩文件。

import zipfile
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) as zip_file:
    zip_file.write('1.txt', arcname='files/file1.txt')
    zip_file.write('2.txt', arcname='files/file2.txt')
print("ZIP文件:'archive.zip' 创建成功")

以上示例,将1.txt、2.txt 两个文件压缩到 archive.zip 文件。其中参数 arcname 为指定存档名称路径,即将1.txt、2.txt 两个文件改名为 file1.txt、file2.txt 存放到 file 文件夹并压缩。

向 ZIP 添加文件

如果将文件添加到已存在的 zip 压缩文件中,需要使用 write() 方法的附加模式('a'),因为写入 模式('w')会重建覆盖现有压缩文件。

import zipfile
with zipfile.ZipFile('archive.zip', 'a', zipfile.ZIP_DEFLATED) as zip_file:
    zip_file.write('3.txt')
    zip_file.write('4.txt')
print("ZIP文件:'archive.zip' 创建成功")

压缩指定路径的所有文件

import os
import zipfile
def zip_folder(folder_path, output_zip_path):
    # 创建一个 ZipFile 对象
    with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        # 遍历指定文件夹中的所有文件
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                # 获取文件的完整路径
                file_path = os.path.join(root, file)
                # 将文件添加到 ZIP 文件中,使用相对于指定文件夹的相对路径
                arcname = os.path.relpath(file_path, start=folder_path)
                zipf.write(file_path, arcname)
# 指定要压缩的文件夹路径和输出的 ZIP 文件路径
folder_to_zip = 'file/' 
output_zip = 'archive.zip'
# 调用函数进行压缩
zip_folder(folder_to_zip, output_zip)

以上示例,将当前路径中 file 文件夹中的所有文件压缩到 archive.zip 压缩文件中。

解压 ZIP 文件

将所有文件从 archive.zip 解压到名为 file 的文件夹中。

使用读取模式 ('r') 打开现有的 ZIP 文件。

ZipFile.extractall() 方法:

将 ZIP 文件中的所有文件提取到指定路径。

import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zip_file:
    zip_file.extractall('file')
print("解压文件成功。")

将指定文件从 archive.zip 中解压。

ZipFile.extract() 方法:

将 ZIP 文件中的单个文件解压到指定路径。

import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zip_file:
    zip_file.extract('1.txt', 'file')
print("解压文件成功。")

从 ZIP 文件删除文件

ZipFile.read() 方法:

读取文件内容。

ZipFile.writestr() 方法:

将字符串数据写入文件。

zip_file.namelist() 方法:

压缩文件中所有文件名列表

import zipfile
import os 
with zipfile.ZipFile('archive.zip', 'r') as zip_file:
    all_files = zip_file.namelist() # 获取压缩文件中文件列表
    # 生成保留文件列表
    files_to_keep = [file for file in all_files if file != '2.txt'] 
# 将保留文件压缩到新压缩文件
    with zipfile.ZipFile('archive2.zip', 'w', zipfile.ZIP_DEFLATED) as new_zip_file:
        for file in files_to_keep:
            data = zip_file.read(file)
            new_zip_file.writestr(file, data)

获取 ZIP 文件的信息

from zipfile import ZipFile 
import datetime 
file_name = "archive.zip"
with ZipFile(file_name, 'r') as zip_file: 
    for info in zip_file.infolist(): 
        print(info.filename) 
        print('\tModified:\t' + str(datetime.datetime(*info.date_time))) 
        print('\tSystem:\t\t' + str(info.create_system) + '(0 = Windows, 3 = Unix)') 
        print('\tZIP version:\t' + str(info.create_version)) 
        print('\tCompressed:\t' + str(info.compress_size) + ' bytes') 
        print('\tUncompressed:\t' + str(info.file_size) + ' bytes') 

运行结果:

files/file1.txt
 Modified: 2024-12-27 16:56:16
 System:  0(0 = Windows, 3 = Unix)
 ZIP version: 20
 Compressed: 6 bytes
 Uncompressed: 4 bytes
files/file2.txt
 Modified: 2024-12-27 16:56:24
 System:  0(0 = Windows, 3 = Unix)
 ZIP version: 20
 Compressed: 5 bytes
 Uncompressed: 5 bytes

相关文章

最全RAR文件操作指南:如何用Python压缩、解压与筛选文件

引言:Python 对 .rar 文件进行压缩、解压以及筛选特定文件的操作代码封装一下import os import rarfile #todo 用于处理 RAR 文件 import zipfil...

20 天学 Python 文件操作:Day 16 文件压缩与解压

在日常工作中,我们经常需要对文件进行压缩和解压操作以减少存储空间或方便文件传输。今天,我们将学习如何使用 Python 进行文件的压缩与解压。1. 使用 zipfile 模块进行 ZIP 文件操作创建...

python散装笔记——131: 解压文件

为了提取或解压缩tarball(tar归档文件)、ZIP文件或gzip文件,Python分别提供了tarfile、zipfile和gzip模块。Python的tarfile模块提供了TarFile.e...

Python 实现图片大小压缩

起因截图组件配合验证码使用优化建议既然没人帮忙解决只能自己动手了小白先直接献上代码from PIL import Imageimport osdef compress_image(infile, ou...

Python 简单的解压缩算法

line = input().strip() need_ch = [] for i in range(len(line)): if line[i].isalpha(): if...

Python 视频处理与特效:高效实现编辑与压缩

现如今各种短视频,特效已经火的可谓“一塌糊涂”,那我们今天就来聊聊用python语言来处理视频与特效。Python 提供了强大的库,如 FFmpeg 和 MoviePy,可用于处理、编辑、压缩和添加视...