做(zuò)自(zì)由與創造的先行(xíng)者

數(shù)據壓縮 | Data Compression gzip

Python開(kāi)發手冊

這(zhè)個模塊提供了(le)一(yī)個簡單的界面來壓縮和(hé)解壓縮文件,就像GNU程序gzip和(hé)gunzip一(yī)樣。

數(shù)據壓縮由zlib模塊提供。

該gzip模塊提供了(le)GzipFile在Python的文件對象之後建模的類。本GzipFile類讀取和(hé)寫入gzip的 -format文件,自(zì)動壓縮或解壓縮數(shù)據,使得它看(kàn)起來像一(yī)個普通(tōng)的文件對象。

請(qǐng)注意,該模塊不支持gzip和(hé)gunzip程序可(kě)以解壓縮的其他(tā)文件格式,例如(rú)壓縮和(hé)打包産生的文件格式。

該模塊定義了(le)以下(xià)項目:

class gzip.GzipFile([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])

GzipFile該類的構造函數(shù),它模拟文件對象的大部分方法,但(dàn)readinto()和(hé)truncate()方法除外(wài)。至少(shǎo)fileobj和(hé)filename中的一(yī)個必須被賦予一(yī)個不平凡的值。

新的類實例基于fileobj,它可(kě)以是常規文件,StringIO對象或模拟文件的任何其他(tā)對象。它默認為(wèi)None,在這(zhè)種情況下(xià)打開(kāi)文件名以提供文件對象。

當fileobj不是時(shí)None,filename參數(shù)僅用于包含在gzip文件頭中,其中可(kě)能(néng)包含未壓縮文件的原始文件名。如(rú)果可(kě)辨别,它默認為(wèi)fileobj的文件名; 否則,它默認為(wèi)空字符串,在這(zhè)種情況下(xià),原始文件名不包含在标題中。

該模式參數(shù)可(kě)以是任意的'r','rb','a','ab','w',或者'wb',根據文件是否被讀取或寫入。如(rú)果可(kě)辨别,缺省值是fileobj的模式; 否則,默認是'rb'。如(rú)果沒有給出,'b'标志将被添加到模式以确保文件以二進制模式打開(kāi)以實現跨平台可(kě)移植性。

所述compresslevel參數(shù)是從(cóng)一(yī)個整數(shù)0,以9控制壓縮的水平; 1是最快(kuài)的并且産生最小的壓縮,并且9是最慢(màn)的并且産生最大的壓縮。0沒有壓縮。默認是9。

的修改時(shí)間(jiān)參數(shù)是壓縮時(shí)将被寫入到該流一(yī)個可(kě)選的數(shù)字時(shí)間(jiān)戳記。所有gzip壓縮流都(dōu)需要(yào)包含一(yī)個時(shí)間(jiān)戳。如(rú)果省略或None使用當前時(shí)間(jiān)。該模塊在解壓縮時(shí)忽略時(shí)間(jiān)戳; 然而,一(yī)些程序,比如(rú)gunzip,就是利用它。時(shí)間(jiān)戳的格式與返回的對象time.time()的st_mtime屬性的返回值和(hé)格式相同os.stat()。

調用GzipFile對象的close()方法不會關閉fileobj,因為(wèi)您可(kě)能(néng)希望在壓縮數(shù)據之後附加更多的材質。這(zhè)還允許您将StringIO打開(kāi)的對象作(zuò)為(wèi)fileobj傳遞,并使用StringIO對象的getvalue()方法檢索得到的內(nèi)存緩沖區(qū)。

GzipFile支持叠代和(hé)with聲明(míng)。

在版本2.7中進行(xíng)了(le)更改:with添加了(le)對語句的支持。

在版本2.7中進行(xíng)了(le)更改:添加了(le)對零填充文件的支持。

2.7版本中的新功能(néng):mtime參數(shù)。

gzip.open(filename[, mode[, compresslevel]])

這(zhè)是一(yī)個簡寫GzipFile(filename, mode, compresslevel)。該文件名參數(shù)是必需的; 模式默認為(wèi)'rb'并将默認壓縮級别設置為(wèi)9。

1.使用示例

如(rú)何讀取壓縮文件的示例:

import gzip

with gzip.open('file.txt.gz', 'rb') as f:

file_content = f.read()

複制

如(rú)何創建壓縮的GZIP文件的示例:

import gzip

content = "Lots of content here"

with gzip.open('file.txt.gz', 'wb') as f:

f.write(content)

複制

如(rú)何GZIP壓縮現有文件的示例:

import gzip

import shutil

with open('file.txt', 'rb') as f_in, gzip.open('file.txt.gz', 'wb') as f_out:

shutil.copyfileobj(f_in, f_out)

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發