Bagaimana untuk menggunakan modul pakej pemampatan zip dalam Python

PHPz
Lepaskan: 2023-04-20 14:22:06
ke hadapan
2348 orang telah melayarinya

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,不压缩
Salin selepas log masuk

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, '.')
Salin selepas log masuk

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
Salin selepas log masuk

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()
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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')
Salin selepas log masuk

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__)
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan