本文目录导读:

我来详细介绍Python操作ZIP压缩包的几种主要方法。
使用 zipfile 模块
zipfile 是Python内置的模块,无需额外安装。
创建ZIP压缩包
import zipfile
import os
# 创建ZIP文件并添加文件
with zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
# 添加单个文件
zf.write('file1.txt')
# 添加文件并指定在压缩包中的路径
zf.write('file2.txt', 'documents/file2.txt')
# 添加整个目录
for root, dirs, files in os.walk('my_folder'):
for file in files:
file_path = os.path.join(root, file)
# 保留目录结构
arcname = os.path.relpath(file_path, os.path.dirname('my_folder'))
zf.write(file_path, arcname)
读取ZIP压缩包
# 查看ZIP文件内容
with zipfile.ZipFile('archive.zip', 'r') as zf:
# 列出所有文件
print(zf.namelist())
# 获取文件信息
for info in zf.infolist():
print(f"文件名: {info.filename}")
print(f"原始大小: {info.file_size}")
print(f"压缩后大小: {info.compress_size}")
print("-" * 30)
解压ZIP压缩包
# 解压所有文件到指定目录
with zipfile.ZipFile('archive.zip', 'r') as zf:
zf.extractall('output_folder')
# 解压单个文件
with zipfile.ZipFile('archive.zip', 'r') as zf:
zf.extract('file1.txt', 'output_folder')
# 解压到当前目录
with zipfile.ZipFile('archive.zip', 'r') as zf:
zf.extractall()
读取压缩包内的文件内容
with zipfile.ZipFile('archive.zip', 'r') as zf:
# 读取特定文件内容
with zf.open('file1.txt') as f:
content = f.read().decode('utf-8')
print(content)
# 或使用read()方法
content = zf.read('file1.txt').decode('utf-8')
使用 shutil 模块(简化操作)
import shutil
# 压缩整个目录
shutil.make_archive('output', 'zip', 'source_folder')
# 解压ZIP文件
shutil.unpack_archive('archive.zip', 'extract_folder', 'zip')
实用示例
带密码的ZIP文件
import zipfile
# 创建加密ZIP文件
with zipfile.ZipFile('protected.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
zf.setpassword(b'my_password')
zf.write('secret.txt')
# 读取加密ZIP文件
with zipfile.ZipFile('protected.zip', 'r') as zf:
zf.setpassword(b'my_password')
zf.extractall('output')
内存中的ZIP操作
import zipfile
import io
# 在内存中创建ZIP
buffer = io.BytesIO()
with zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED) as zf:
zf.writestr('hello.txt', 'Hello, World!')
zf.writestr('data.csv', 'name,age\nAlice,30\nBob,25')
# 读取内存中的ZIP
buffer.seek(0)
with zipfile.ZipFile(buffer, 'r') as zf:
print(zf.read('hello.txt').decode('utf-8'))
过滤文件进行压缩
def zip_filtered_files(filename, files_to_zip, extensions=['.txt', '.csv']):
"""只压缩指定扩展名的文件"""
with zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) as zf:
for file_path in files_to_zip:
if any(file_path.endswith(ext) for ext in extensions):
zf.write(file_path)
# 使用示例
import glob
all_files = glob.glob('*')
zip_filtered_files('filtered.zip', all_files, ['.txt', '.md'])
处理大文件(分块读取)
import zipfile
def extract_large_file(zip_path, file_name, output_path):
"""分块解压大文件"""
with zipfile.ZipFile(zip_path, 'r') as zf:
with zf.open(file_name) as source:
with open(output_path, 'wb') as target:
while True:
chunk = source.read(1024 * 1024) # 1MB chunks
if not chunk:
break
target.write(chunk)
# 使用示例
extract_large_file('large_archive.zip', 'big_file.dat', 'output.dat')
压缩模式说明
'r': 读取已存在的ZIP文件'w': 创建新ZIP文件或覆盖已存在的文件'a': 追加到已存在的ZIP文件'x': 创建新ZIP文件,如果文件已存在则报错
压缩算法
# ZIP_STORED: 不压缩,仅存储(默认)
# ZIP_DEFLATED: 使用DEFLATE算法压缩
# ZIP_BZIP2: 使用BZIP2算法压缩
# ZIP_LZMA: 使用LZMA算法压缩
with zipfile.ZipFile('compressed.zip', 'w', zipfile.ZIP_BZIP2) as zf:
zf.write('large_file.txt')
这些方法覆盖了Python操作ZIP文件的大部分场景,可以根据具体需求选择合适的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播