最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Python加解壓文件gzip庫的操作

 更新時(shí)間:2022年11月16日 10:55:44   作者:fanstuck  
Gzip是若干種文件壓縮程序的簡(jiǎn)稱,通常指GNU計(jì)劃的實(shí)現(xiàn)。本文為大家介紹了Python中加解壓文件gzip庫的基本操作,感興趣的小伙伴可以了解一下

一、gzip

GZIP概念

Gzip是若干種文件壓縮程序的簡(jiǎn)稱,通常指GNU計(jì)劃的實(shí)現(xiàn),此處的gzip代表GNU zip。也經(jīng)常用來表示gzip這種文件格式。

GZIP最早由Jean-loup Gailly和Mark Adler創(chuàng)建,用于UNⅨ系統(tǒng)的文件壓縮。我們?cè)贚inux中經(jīng)常會(huì)用到后綴為.gz的文件,它們就是GZIP格式的?,F(xiàn)今已經(jīng)成為Internet 上使用非常普遍的一種數(shù)據(jù)壓縮格式,或者說一種文件格式。

HTTP協(xié)議的GZIP編碼是一種用來改進(jìn)WEB應(yīng)用程序性能的技術(shù)。大流量的WEB站點(diǎn)常常使用GZIP壓縮技術(shù)來讓用戶感受更快的速度。這一般是指WWW服務(wù)器中安裝的一個(gè)功能,當(dāng)有人來訪問這個(gè)服務(wù)器中的網(wǎng)站時(shí),服務(wù)器中的這個(gè)功能就將網(wǎng)頁內(nèi)容壓縮后傳輸?shù)絹碓L的電腦瀏覽器中顯示出來.一般對(duì)純文本內(nèi)容可壓縮到原大小的40%.這樣傳輸就快了,效果就是你點(diǎn)擊網(wǎng)址后會(huì)很快的顯示出來.當(dāng)然這也會(huì)增加服務(wù)器的負(fù)載. 一般服務(wù)器中都安裝有這個(gè)功能模塊的。

文件格式

gzip的基礎(chǔ)是DEFLATE,DEFLATE是LZ77與哈夫曼編碼的一個(gè)組合體。盡管這種文件格式允許多個(gè)這樣的數(shù)據(jù)拼接在一起,在解壓時(shí)也能認(rèn)出它們是拼接在一起的數(shù)據(jù),但通常gzip僅用來壓縮單個(gè)文件。多個(gè)文件的壓縮歸檔通常是首先將這些文件合并成一個(gè)tar文件,然后再使用gzip進(jìn)行壓縮,最后生成的.tar.gz或者.tgz文件就是所謂的“tar壓縮包”或者“tarball”。

注意不要將gzip和ZIP壓縮格式混淆。ZIP也使用DEFLATE算法,而且可移植性更好,不需要一個(gè)外部的歸檔工具就可以包容多個(gè)文件。但是,由于ZIP對(duì)每個(gè)文件進(jìn)行單獨(dú)壓縮而沒有利用文件間的冗余信息(即固實(shí)壓縮),所以ZIP的壓縮率會(huì)稍遜于tar壓縮包。

二、Python gzip庫

gzip庫是python的標(biāo)準(zhǔn)庫,此模塊提供的簡(jiǎn)單接口幫助用戶壓縮和解壓縮文件,功能類似于 GNU 應(yīng)用程序 gzip 和 gunzip。數(shù)據(jù)壓縮由 zlib模塊提供。

gzip模塊提供 GzipFile 類和 open()、compress()decompress() 幾個(gè)便利的函數(shù)。GzipFile 類可以讀寫 gzip 格式的文件,還能自動(dòng)壓縮和解壓縮數(shù)據(jù),這讓操作壓縮文件如同操作普通的 file object 一樣方便。

注意,此模塊不支持部分可以被 gzip 和 gunzip 解壓的格式,如利用 compress 或 pack 壓縮所得的文件。

gzip.open

gzip.open(
        filename, 
        mode='rb', 
        compresslevel=9, 
        encoding=None, 
        errors=None, 
        newline=None)

以二進(jìn)制方式或者文本方式打開一個(gè) gzip 格式的壓縮文件,返回一個(gè) file object。

參數(shù)說明:

filename:參數(shù)可以是一個(gè)實(shí)際的文件名(一個(gè)str 對(duì)象或者bytes對(duì)象), 或者是一個(gè)用來讀寫的已存在的文件對(duì)象。

mode:參數(shù)可以是二進(jìn)制模式'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' or 'xb' , 或者是文本模式 'rt', 'at', 'wt', or 'xt'。默認(rèn)值是 'rb'。它的默認(rèn)值是'r',表示以文本模式打開閱讀。其他常見的值有:'w'用于寫入(如果文件已經(jīng)存在,則截?cái)嗨?#39;x'用于獨(dú)占創(chuàng)建,'a'用于追加(在一些Unix系統(tǒng)上,這意味著所有的寫入都追加到文件的末尾,不管當(dāng)前的尋址位置如何)。在文本模式下,如果沒有指定編碼,使用的編碼是與平臺(tái)有關(guān)的:調(diào)用locale.getpreferredencoding(False)來獲得當(dāng)前的locale編碼。(對(duì)于讀寫原始字節(jié),使用二進(jìn)制模式,不指定編碼。) 可用的模式。

compresslevel參數(shù)是從0到9的整數(shù),壓縮等級(jí); 壓縮格式分類。

import gzip
 
# 創(chuàng)建一個(gè)gzip文件
content = "Hello world!"
f = gzip.open('file.txt.gz', 'wb')
f.write(content.encode())
f.close()

其中'wb'就是寫入,若沒有該路徑文件將會(huì)自動(dòng)生成一個(gè)文件。

gzip.GzipFile壓縮和解壓

class gzip.GzipFile(
        filename=None, 
        mode=None, 
        compresslevel=9, 
        fileobj=None, 
        mtime=None)

 GzipFile 類的構(gòu)造器支持 truncate() 的異常,與 file object 的大多數(shù)方法非常相似。fileobj和 filename至少有一個(gè)不為空。

新的實(shí)例基于 fileobj,它可以是一個(gè)普通文件,一個(gè) io.BytesIO 對(duì)象,或者任何一個(gè)與文件相似的對(duì)象。當(dāng) filename 是一個(gè)文件對(duì)象時(shí),它的默認(rèn)值是 None。

當(dāng) fileobj 為 None 時(shí), filename 參數(shù)只用于 gzip 文件頭中,這個(gè)文件有可能包含未壓縮文件的源文件名。如果文件可以被識(shí)別,默認(rèn) fileobj 的文件名;否則默認(rèn)為空字符串,在這種情況下文件頭將不包含源文件名。

需要注意的是,文件默認(rèn)使用二進(jìn)制模式打開。如果要以文本模式打開文件一個(gè)壓縮文件,應(yīng)該使用 open() 方法(或者使用 io.TextIOWrapper 包裝 GzipFile )。

調(diào)用 GzipFileclose() 方法不會(huì)關(guān)閉 fileobj,可以將一個(gè) io.BytesIO 對(duì)象作為 fileobj,也可以使用 io.BytesIOgetvalue() 方法從內(nèi)存緩存中恢復(fù)數(shù)據(jù)。

GzipFile 支持 io.BufferedIOBase 類的接口, 包括迭代和 with 語句。只有 truncate() 方法沒有實(shí)現(xiàn)。

import  gzip
# 創(chuàng)建GzipFile實(shí)例
zf = gzip.GzipFile('file_1.txt.gz', mode = 'wb') 
contents = "Hello world!Friend!"
zf.write(contents.encode())  # 寫文件
zf.close()  # 關(guān)閉

gzip.comress()壓縮數(shù)據(jù)

另外一種方法是用gzip.comress()方法將從文件中讀出的數(shù)據(jù)進(jìn)行壓縮,再將壓縮后的數(shù)據(jù)寫入到文件中。

import  gzip
 
contents = "Hello world!Friend!"
pf = gzip.open('file_2.txt.gz', 'wb')
data_comp = gzip.compress(contents.encode()) # 壓縮數(shù)據(jù)
pf.write(data_comp)  # 寫文件
pf.close()  # 關(guān)閉

從壓縮文件看該方法和前2種效果是一樣的。

下面這種方法更簡(jiǎn)便、更安全:

import  gzip
with open('file_3.txt.gz', 'wb') as pw, open('file_3.txt','rb') as pr:
    pw.write(gzip.compress(pr.read())  )  

解壓數(shù)據(jù)

第一種

直接open就可以了:

import  gzip
zip_filename = 'file.txt.gz'
with open('./file_1.txt','wb') as pw:
    zf = gzip.open(zip_filename, mode = 'rb') 
    pw.write(zf.read())  # 寫文件
    zf.close()

第二種

和壓縮方法的順序是一樣的,使用GzipFile就好了:

zip_filename = 'file_2.txt.gz'
with open('./file_2.txt','wb') as pw:
    zf = gzip.GzipFile(zip_filename, mode = 'rb') 
    pw.write(zf.read())  # 寫文件
    zf.close()

第三種

zip_filename = 'file_3.txt.gz'
with open(zip_filename, 'rb') as pr, open('./file_3.txt','wb') as pw:
    pw.write(gzip.decompress(pr.read())  )  

集體解壓

import os
import gzip
 
 
def unzip_gz_file(path, new_path):
    count = 0
    try:
        for f_path in os.listdir(path):
            if '.gz' in f_path:
                try:
                    with gzip.GzipFile(fileobj=open(path + "/" + f_path, 'rb'), mode='rb') as g:
                        with open(new_path + "/" + f_path.replace(".gz", ""), "wb") as f:
                            f.write(g.read())
                        print(count, f"文件{f_path}  解壓完成...")
                except Exception as e:
                    print(f_path, e)
                count += 1
    except Exception as e:
        print(e)
    else:
        print("文件全部解壓完成!")
 
 
path = './'
new_path = './unzip_file'
unzip_gz_file(path, new_path)

到此這篇關(guān)于一文詳解Python加解壓文件gzip庫的操作的文章就介紹到這了,更多相關(guān)Python gzip庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲實(shí)戰(zhàn)之使用Scrapy爬取豆瓣圖片

    Python爬蟲實(shí)戰(zhàn)之使用Scrapy爬取豆瓣圖片

    在用Python的urllib和BeautifulSoup寫過了很多爬蟲之后,本人決定嘗試著名的Python爬蟲框架——Scrapy.本次分享將詳細(xì)講述如何利用Scrapy來下載豆瓣名人圖片,需要的朋友可以參考下
    2021-06-06
  • python如何將圖片轉(zhuǎn)換素描畫

    python如何將圖片轉(zhuǎn)換素描畫

    這篇文章主要介紹了python如何將圖片轉(zhuǎn)換素描畫,幫助大家更好的用python處理圖片,感興趣的朋友可以了解下
    2020-09-09
  • Flask框架web開發(fā)之零基礎(chǔ)入門

    Flask框架web開發(fā)之零基礎(chǔ)入門

    這篇文章主要介紹了Flask框架web開發(fā)之零基礎(chǔ)入門,簡(jiǎn)單的介紹了如何使用及其數(shù)據(jù)庫集成,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • ???????如何利用python破解zip加密文件

    ???????如何利用python破解zip加密文件

    這篇文章主要介紹了???????如何利用python破解zip加密文件,文章基于python的相關(guān)資料展開破解zip加密文件的詳細(xì)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器

    Python自動(dòng)化之實(shí)現(xiàn)桌面壁紙下載器

    隨著計(jì)算機(jī)性能的提升,人們對(duì)計(jì)算機(jī)個(gè)性化的要求也越來越高了,自己使用的計(jì)算機(jī)當(dāng)然要設(shè)置成自己喜歡的風(fēng)格!本文就來用Python做個(gè)桌面壁紙下載器,需要的可以參考一下
    2022-11-11
  • Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子

    Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子

    這篇文章主要介紹了Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子,需要的朋友可以參考下
    2014-05-05
  • 詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案

    詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案

    這篇文章主要介紹了詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python基礎(chǔ)學(xué)習(xí)之奇異的GUI對(duì)話框

    Python基礎(chǔ)學(xué)習(xí)之奇異的GUI對(duì)話框

    今天跨進(jìn)了GUI編程的園地,才發(fā)現(xiàn)python語言是這么的好玩,文中對(duì)GUI對(duì)話框作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Python如何使用seleniumwire接管Chrome查看控制臺(tái)中參數(shù)

    Python如何使用seleniumwire接管Chrome查看控制臺(tái)中參數(shù)

    文章介紹了如何使用Python的seleniumwire庫來接管Chrome瀏覽器,并通過控制臺(tái)查看接口參數(shù),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫的實(shí)現(xiàn)示例

    Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫的實(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧現(xiàn)示例
    2020-06-06

最新評(píng)論

寻甸| 中卫市| 荔波县| 郸城县| 邵阳市| 庄浪县| 博罗县| 江陵县| 双辽市| 杭锦后旗| 麻城市| 贞丰县| 钦州市| 光泽县| 五河县| 六枝特区| 岳池县| 新宾| 团风县| 昔阳县| 蓬溪县| 遂宁市| 望江县| 墨竹工卡县| 甘孜县| 巴东县| 嘉善县| 射洪县| 定日县| 潮安县| 莲花县| 禄劝| 灵璧县| 泽普县| 启东市| 甘洛县| 体育| 博爱县| 云梦县| 宝鸡市| 临清市|