Maison  >  Article  >  développement back-end  >  Comment utiliser le module de package de compression zipfile en Python

Comment utiliser le module de package de compression zipfile en Python

PHPz
PHPzavant
2023-04-20 14:22:062308parcourir

Introduction

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,不压缩

效果

Comment utiliser le module de package de compression zipfile en Python

解压文件

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, '.')

是否ZIP文件

调用 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)

写入ZipInfo

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)

效果

Comment utiliser le module de package de compression zipfile en Python

追加文件

把 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')

创建包含Python库的ZIP

class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1)

Ce module ne peut actuellement pas le gérer. Les fichiers ZIP de volume prennent en charge le décryptage des fichiers cryptés dans les archives ZIP, mais ne peuvent actuellement pas créer de fichier crypté. Le décryptage est très lent car il est implémenté en Python natif au lieu de C

Fichiers compressés🎜🎜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🎜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
🎜Le code est le suivant : 🎜
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🎜🎜Comment utiliser le module de package de compression zipfile en Python🎜🎜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🎜🎜Comment utiliser le module de package de compression zipfile en Python🎜🎜Ajouter un fichier🎜🎜Changer le modede 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🎜rrreee

Ce 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer