网站首页 > 技术文章 正文
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
- 上一篇: 常见的序列化框架及Protobuf原理
- 下一篇: 10行Python代码实现智能文件整理
猜你喜欢
- 2025-04-24 Python黑客实战编程---3分钟教你如何暴力破解FTP服务器口令
- 2025-04-24 Python黑客入门:暴力破解zip,零基础也可以学会
- 2025-04-24 10行Python代码实现智能文件整理
- 2025-04-24 常见的序列化框架及Protobuf原理
- 2025-04-24 Python一种字符串压缩表示的解压
- 2025-04-24 Python 视频处理与特效:高效实现编辑与压缩
- 263℃Python短文,Python中的嵌套条件语句(六)
- 263℃python笔记:for循环嵌套。end=""的作用,图形打印
- 261℃PythonNet:实现Python与.Net代码相互调用!
- 256℃Python实现字符串小写转大写并写入文件
- 255℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 116℃原来2025是完美的平方年,一起探索六种平方的算吧
- 96℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 89℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)