Maison >développement back-end >Tutoriel Python >Comment utiliser le module de package de compression zipfile en Python
Le format de fichier ZIP est une norme d'archivage et de compression couramment utilisée. Le module zipfile
fournit des outils pour créer, lire, écrire, ajouter et lister des fichiers ZIPzipfile
模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具
此模块目前不能处理分卷 ZIP 文件,支持解密 ZIP 归档中的加密文件,但是目前不能创建一个加密的文件。解密非常慢,因为它是使用原生 Python 而不是 C 实现的
压缩文件
class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True)
:ZipFile 对象,compression指定压缩模式
ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)
:写入压缩文件,filename为原文件名,arcname为存档文件名,compress_type指定压缩模式
压缩模式 | 含义 |
ZIP_STORED | 不压缩,默认值 |
ZIP_DEFLATED | 常用的 ZIP 压缩 |
ZIP_BZIP2 | BZIP2 压缩 |
ZIP_LZMA | LZMA 压缩 |
代码如下:
import random import zipfile with open('1.txt', mode='w') as f: for _ in range(1000): f.write(str(random.random()) + '\n') with zipfile.ZipFile('1.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf: zf.write('1.txt') zf.write('1.txt', '2.txt', zipfile.ZIP_STORED) # 原文件名1.txt,存为2.txt,不压缩
效果
ZipFile.namelist()
:返回按名称排序的文件列表
ZipFile.extract(member, path=None, pwd=None)
:解压文件到指定目录
import zipfile with zipfile.ZipFile('1.zip') as zf: for filename in zf.namelist(): zf.extract(filename, '.')
调用 zipfile.is_zipfile(filename)
是一个有效的 ZIP 文件返回 True
,否则返回 False
,压根不存在返回 False
import zipfile for filename in ['1.txt', '1.zip', '2.zip']: print(filename, zipfile.is_zipfile(filename)) # 1.txt False # 1.zip True # 2.zip False
ZipFile.namelist()
:返回按名称排序的文件列表
ZipFile.getinfo(name)
:返回一个 ZipInfo对象
import zipfile with zipfile.ZipFile('1.zip', 'r') as zf: print(zf.namelist()) # 文件列表 for info in zf.infolist(): print(info) print(info.filename) # 文件名称 print(info.date_time) # 修改时间,可用datetime.datetime(*info.date_time) print(info.compress_type) # 压缩类型,值为zipfile.ZIP_STORED、ZIP_DEFLATED、ZIP_BZIP2、ZIP_LZMA print(info.comment) # 注释 print(info.extra) # 扩展字段数据 print(info.create_system) # 创建所用系统,0为Windows,3为Unix print(info.create_version) # 创建所用PKZIP版本 print(info.extract_version) # 提取所用PKZIP版本 print(info.flag_bits) # 标志位 print(info.volume) # 文件头的分卷号 print(info.compress_size) # 已压缩的数据大小 print(info.file_size) # 未压缩的数据大小 print()
ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None)
:将一个文件写入压缩文件
import random import zipfile data = ''.join([str(random.random()) + '\n' for i in range(1000)]) with zipfile.ZipFile('1.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf: zf.writestr('1.txt', data)
class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))
:压缩文件成员信息类
import time import random import zipfile data = ''.join([str(random.random()) + '\n' for i in range(1000)]) with zipfile.ZipFile('1.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf: info = zipfile.ZipInfo('1.txt', date_time=time.localtime(time.time())) info.compress_type = zipfile.ZIP_DEFLATED info.comment = b'a comment' info.create_system = 0 zf.writestr(info, data)
效果
把 ZipFile
的 mode
改为追加模式 a
import random import zipfile with open('2.txt', mode='w') as f: for _ in range(1000): f.write(str(random.random()) + '\n') with zipfile.ZipFile('1.zip', mode='a') as zf: zf.write('2.txt')
class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1)
class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED,allowZip64=True, compresslevel=None, * , strict_timestamps=True)
: objet ZipFile, la compression spécifie le mode de compression🎜🎜ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)
: Écrivez un fichier compressé, filename est le nom du fichier d'origine, arcname est le nom du fichier d'archive, compress_type spécifie le mode de compression🎜Signification | |
ZIP_STORED | Aucune compression, valeur par défaut |
ZIP_DEFLATED | Compression ZIP couramment utilisée |
ZIP_BZIP2 | Compression BZIP2 |
ZIP_LZMA | Compression LZMA |
import sys import zipfile with zipfile.PyZipFile('pyzipfile.zip', mode='w') as zf: zf.debug = 3 zf.writepy('.') for name in zf.namelist(): print(name) sys.path.insert(0, 'pyzipfile.zip') import zipfile_pyzipfile print('Imported from:', zipfile_pyzipfile.__file__)🎜Effet🎜🎜🎜🎜Extraire le fichier🎜🎜
ZipFile.namelist()
: renvoie une liste de fichiers triés par name🎜🎜ZipFile.extract (member, path=None, pwd=None)
: Décompressez le fichier dans le répertoire spécifié🎜rrreee🎜Si le fichier ZIP🎜🎜Appelez zipfile.is_zipfile(filename )
🎜🎜est un ZIP valide Le fichier renvoie True
, sinon il renvoie False
S'il n'existe pas, il renvoie False🎜rrreee🎜Lire les métadonnées🎜🎜<code>ZipFile.namelist( )
: renvoie une liste de fichiers triés par nom 🎜🎜ZipFile.getinfo(name)
: renvoie un objet ZipInfo 🎜 rrreee🎜Compresser les fichiers provenant d'autres sources de données🎜🎜ZipFile.writestr (zinfo_or_arcname, data, compress_type=None, compresslevel=None)
: Écrivez un fichier dans le fichier compressé🎜rrreee🎜Écrivez dans ZipInfo🎜🎜class zipfile.ZipInfo(filename='NoName', date_time=( 1980, 1, 1, 0, 0, 0)) : classe d'informations sur les membres du fichier compressé🎜rrreee🎜Effect🎜🎜🎜🎜Ajouter un fichier🎜🎜Changer le mode
de ZipFile
> pour ajouter le mode a
🎜rrreee🎜Créer un ZIP contenant la bibliothèque Python🎜🎜class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED,allowZip64=True,optimise=-1 )
: utilisé pour créer une classe ZIP contenant la bibliothèque Python 🎜🎜zipfile_pyzipfile.py🎜rrreeeCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!