Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan modul pakej pemampatan zip dalam Python

Bagaimana untuk menggunakan modul pakej pemampatan zip dalam Python

PHPz
PHPzke hadapan
2023-04-20 14:22:062345semak imbas

Pengenalan

Format fail ZIP ialah standard pengarkiban dan pemampatan yang biasa digunakan Modul zipfile menyediakan alatan untuk mencipta, membaca, menulis, menambah dan menyenaraikan fail ZIP

Modul ini. pada masa ini tidak dapat mengendalikan fail ZIP volum terbahagi Ia menyokong penyahsulitan fail yang disulitkan dalam arkib ZIP, tetapi tidak boleh mencipta fail yang disulitkan. Penyahsulitan adalah sangat perlahan kerana ia dilaksanakan menggunakan Python asli dan bukannya C

Fail termampat

class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True): Objek ZipFile, mampatan menentukan mod mampatan

ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None): Tulis fail termampat, nama fail ialah nama fail asal, arcname ialah nama fail arkib, compress_type menentukan mod mampatan

压缩模式 含义
ZIP_STORED 不压缩,默认值
ZIP_DEFLATED 常用的 ZIP 压缩
ZIP_BZIP2 BZIP2 压缩
ZIP_LZMA LZMA 压缩

Kodnya adalah seperti berikut:

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

Kesan

Bagaimana untuk menggunakan modul pakej pemampatan zip dalam Python

Ekstrak fail

ZipFile.namelist(): Kembalikan senarai fail yang diisih mengikut nama

ZipFile.extract(member, path=None, pwd=None): Ekstrak fail ke direktori yang ditentukan

import zipfile

with zipfile.ZipFile('1.zip') as zf:

    for filename in zf.namelist():

        zf.extract(filename, '.')

Sama ada fail ZIP

dipanggil zipfile.is_zipfile(filename)

ialah fail ZIP yang sah dan mengembalikan True, jika tidak, ia mengembalikan False, jika ia tidak wujud ia kembali 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

Baca metadata

ZipFile.namelist(): Kembalikan senarai fail yang diisih mengikut nama

ZipFile.getinfo(name): Kembalikan ZipInfo objek

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()

daripada sumber data lain Fail mampat

ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None): Tulis fail ke fail mampat

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)

Tulis ZipInfo

class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0)): Kelas maklumat ahli fail termampat

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)

Kesan

Bagaimana untuk menggunakan modul pakej pemampatan zip dalam Python

Tambah fail

Tukar ZipFile mode untuk menambah mod 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')

Buat ZIP yang mengandungi perpustakaan Python

class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1): Digunakan untuk mencipta kelas ZIP yang mengandungi perpustakaan Python

zipfile_pyzipfile.py

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__)

Atas ialah kandungan terperinci Bagaimana untuk menggunakan modul pakej pemampatan zip dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam