欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python標(biāo)準(zhǔn)庫(kù)之zipfile和tarfile模塊的使用

 更新時(shí)間:2022年06月15日 11:18:22   作者:小小垂髫  
zipfile和tarfile是Python中常用的壓縮包模塊,本文將通過(guò)示例詳細(xì)講解一下這兩個(gè)模塊的使用方法,快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧

在我們常用的系統(tǒng)windowsLinux系統(tǒng)中有很多支持的壓縮包格式,包括但不限于以下種類:rar、ziptar,以下的標(biāo)準(zhǔn)庫(kù)的作用就是用于壓縮解壓縮其中一些格式的壓縮包。

zip格式

import zipfile

zipfile模塊操作壓縮包使用ZipFile類進(jìn)行操作,使用方法和open的使用方法很相似,也是使用r、wx、a四種操作模式?;静襟E也是大致分為三步:打開(kāi)文件、操作文件、關(guān)閉文件。可以使用with語(yǔ)法進(jìn)行上下文自動(dòng)操作。

注意一:zipfile也是rwxa四種模式,表示也會(huì)有文件操作中光標(biāo)指針的概念。

注意二:在Python中,幾乎所有涉及到文件相關(guān)的操作都是打開(kāi)、操作、關(guān)閉三個(gè)步驟。

ZipFile參數(shù)說(shuō)明

語(yǔ)法:ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)

參數(shù)含義
file文件路徑
mode操作含義,與文件操作中相同,默認(rèn)為r。
compression壓縮方法,默認(rèn)為ZIP_STORED。
allowZip64操作的壓縮包文件大小大于2G時(shí)應(yīng)該True, 默認(rèn)為T(mén)rue,不用管它。

操作含義

模式含義
w創(chuàng)建一個(gè)新的壓縮包文件。
r讀取已有的壓縮包文件。
a向已有的壓縮包文件中壓縮文件。

壓縮方法

在上面的compression參數(shù)中可以看到,默認(rèn)的壓縮方法為ZIP_STORED。其實(shí)在zipfile模塊中定義了一些壓縮方法常量,其中最常用的為以下兩種:

ZIP_STORED = 0  # 打包歸檔(不壓縮)
ZIP_DEFLATED = 8  # 壓縮文件(壓縮)

注意,壓縮方法指的是將文件寫(xiě)入壓縮包中采用的方法,所以,如果是解壓縮文件,就沒(méi)必要指定這個(gè)壓縮方法了。

常用方法

write -- 指定文件寫(xiě)入壓縮包(壓縮文件)

語(yǔ)法:write(filename, arcname=None)

語(yǔ)法:write(壓縮文件路徑,寫(xiě)入壓縮包后的路徑和名字(默認(rèn)原名))

寫(xiě)入文件如果是文件夾,那么不會(huì)將文件夾中的內(nèi)容一同寫(xiě)入。

close -- 關(guān)閉對(duì)象(保存文件)

這是我要壓縮的文件夾。

使用ZIP_STORED壓縮。

import zipfile

# 文件路徑
zip_file_path = r'D:\test.zip'  # 壓縮包路徑
file_path = r'D:\10-中日歐美信息解析'  # 被壓縮文件

# 默認(rèn)使用ZIP_STORED
zf = zipfile.ZipFile(zip_file_path, 'w')

# 寫(xiě)入文件(文件夾的話,不會(huì)將文件夾中的文件一同寫(xiě)入)
zf.write(file_path)

# 關(guān)閉文件
zf.close()

可以看到,如果文件夾直接壓縮的話,不會(huì)將其中的文件一同壓縮。

讓文件夾中的所有文件迭代寫(xiě)入壓縮包中。

import os
import zipfile


def writeZip(zf, file, arc_path=None):
    """迭代壓縮文件夾"""
    # 設(shè)置壓縮路徑
    if arc_path is None:
        arc_path = rf'\{os.path.basename(file)}'

    # 先壓縮本文件
    zf.write(file, arc_path)

    # 如果是文件夾
    if os.path.isdir(file):
        
        # 獲取它所有的子文件
        inner_files = os.listdir(file)
        
        # 將所有的子文件壓縮
        for inner_file in inner_files:
            inner_file = f'{file}{os.sep}{inner_file}'
            arc = fr'{arc_path}\{os.path.basename(inner_file)}'
            writeZip(zf, inner_file, arc)


# 文件路徑
zip_file_path = r'D:\test.zip'  # 壓縮包路徑
file_path = r'D:\10-中日歐美信息解析'  # 被壓縮文件

# 默認(rèn)使用ZIP_STORED
zf = zipfile.ZipFile(zip_file_path, 'w')

# 寫(xiě)入文件(自定義一個(gè)函數(shù),迭代壓縮文件夾)
writeZip(zf, file_path)

# 關(guān)閉文件
zf.close()

現(xiàn)在就可以看到,雖然所有的文件已經(jīng)全部寫(xiě)入壓縮包中,但是ZIP_STORED方法并沒(méi)有壓縮文件。

改用ZIP_DEFLATED方法壓縮文件。

import os
import zipfile


def writeZip(zf, file, arc_path=None):
    """迭代壓縮文件夾"""
    # 設(shè)置壓縮路徑
    if arc_path is None:
        arc_path = rf'\{os.path.basename(file)}'

    # 先壓縮本文件
    zf.write(file, arc_path)

    # 如果是文件夾
    if os.path.isdir(file):

        # 獲取它所有的子文件
        inner_files = os.listdir(file)

        # 將所有的子文件壓縮
        for inner_file in inner_files:
            inner_file = f'{file}{os.sep}{inner_file}'
            arc = fr'{arc_path}\{os.path.basename(inner_file)}'
            writeZip(zf, inner_file, arc)


# 文件路徑
zip_file_path = r'D:\test.zip'  # 壓縮包路徑
file_path = r'D:\10-中日歐美信息解析'  # 被壓縮文件

# 使用ZIP_DEFLATED壓縮
zf = zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED)

# 寫(xiě)入文件(自定義一個(gè)函數(shù),迭代壓縮文件夾)
writeZip(zf, file_path)

# 關(guān)閉文件
zf.close()

可以看到,文件是壓縮寫(xiě)入內(nèi)部的。

解壓縮

解壓縮有如下兩種方法,注意,解壓縮就是在讀文件,要將操作模式變更為r。

方法說(shuō)明
extract解壓縮單個(gè)指定的文件。
extractall解壓縮所有的文件。

語(yǔ)法:extract(member,path=None, pwd=None)

語(yǔ)法:extract(指定文件(壓縮包中的路徑),解壓到的位置(默認(rèn)為當(dāng)前工作目錄),指定的密碼(有些壓縮包有密碼,格式為字節(jié)流))

語(yǔ)法:extractall(path=None, pwd=None)

語(yǔ)法:extractall(解壓到的位置, 密碼)

注意:解壓文件和路徑中的文件夾同名會(huì)報(bào)錯(cuò),因?yàn)槲募o(wú)法重置文件夾。

namelist -- 迭代返回壓縮包中的文件

import zipfile


with zipfile.ZipFile(r'D:\test.zip') as zf:
    res = zf.namelist()
    print(res)
    # ['10-中日歐美信息解析/', '10-中日歐美信息解析/1-代碼/', ...]

infolist -- 迭代返回壓縮包中的文件信息

比如文件的權(quán)限等。

printdir -- 查看壓縮包中的文件的信息

查看壓縮包中的文件信息,比如文件的大小、創(chuàng)建日期等。默認(rèn)查看所有的文件。

語(yǔ)法:printdir(file=None)

tar包 和 gz、bz2、xz格式

import tarfile

tarfile的使用和文件操作更加的相似,只是在壓縮模式上略有不同。

使用linux系統(tǒng)的朋友都知道,tar是Linux的一種打包方式,打包成為tar包之后,才可以使用其它的壓縮程序去壓縮。最常用的壓縮方式是gzip,壓縮率最高的方式bzip2,此外還支持另一種比較小眾的xzip格式。

主要操作方法為tarfile.TarFile.open(),可以直接tarfile.open()。

語(yǔ)法:open(name, mode='r')

當(dāng)初在學(xué)習(xí)的時(shí)候,老師還教有encoding='UTF-8'參數(shù),但是文件操作要什么編碼格式?感覺(jué)他是為了方便直接從文件操作的代碼上直接復(fù)制過(guò)來(lái)的,然后沒(méi)有刪掉。

操作tar包

模式為rw、a、x四種為主,外加使用add方法寫(xiě)入文件,退出依然使用close方法。

add(name, arcname)

add(壓縮文件,壓縮別名)

注意,壓縮別名一定不要以路徑分隔符為結(jié)尾,否則只會(huì)創(chuàng)建一個(gè)文件夾。

import tarfile

with tarfile.open('test.tar', 'w') as tf:
    tf.add('test.txt')

壓縮

壓縮的方式主要是將模式改變,在rwx的基礎(chǔ)上加上各個(gè)壓縮的方式,變成:r:gzw:bz2、x:xz等樣式,然后在將剛才創(chuàng)建的tar包壓縮,當(dāng)然也可以直接將文件壓縮成為壓縮包。

注意,a模式不能配備任何壓縮模式,因?yàn)間zip、bzip2、xzip不能直接往里面追加文件,所以如果要追加文件,將tar包解壓縮出來(lái),然后追加再壓縮。

import tarfile

# tar包以gzip格式壓縮
with tarfile.open('test.tar.gz', 'w:gz') as tf:
    tf.add('test.tar')

解壓縮

tarfile的解壓縮方法和zipfile的一模一樣。

方法含義
extract解壓縮指定文件
extractall解壓縮所有文件

getnames -- 返回壓縮包中的文件(list)

刪除壓縮包中的文件

zipfile和tarfile不支持刪除壓縮包中的文件,所以如果有需要?jiǎng)h除壓縮包中的文件,可以將壓縮包解壓出來(lái),然后刪除其中的文件,再壓縮。

到此這篇關(guān)于Python標(biāo)準(zhǔn)庫(kù)之zipfile和tarfile模塊的使用的文章就介紹到這了,更多相關(guān)Python zipfile tarfile模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python調(diào)用JavaScript代碼的方法

    Python調(diào)用JavaScript代碼的方法

    這篇文章主要介紹了Python調(diào)用JavaScript代碼的方法,幫助大家在不同場(chǎng)景里,采用的最佳調(diào)用方式,提高程序的性能,感興趣的朋友可以了解下
    2020-10-10
  • TensorFlow實(shí)現(xiàn)指數(shù)衰減學(xué)習(xí)率的方法

    TensorFlow實(shí)現(xiàn)指數(shù)衰減學(xué)習(xí)率的方法

    這篇文章主要介紹了TensorFlow實(shí)現(xiàn)指數(shù)衰減學(xué)習(xí)率的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 淺談PySpark SQL 相關(guān)知識(shí)介紹

    淺談PySpark SQL 相關(guān)知識(shí)介紹

    這篇文章主要介紹了淺談PySpark SQL 相關(guān)知識(shí)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • numpy數(shù)組做圖片拼接的實(shí)現(xiàn)(concatenate、vstack、hstack)

    numpy數(shù)組做圖片拼接的實(shí)現(xiàn)(concatenate、vstack、hstack)

    這篇文章主要介紹了numpy數(shù)組做圖片拼接的實(shí)現(xiàn)(concatenate、vstack、hstack),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python使用dict.fromkeys()快速生成一個(gè)字典示例

    Python使用dict.fromkeys()快速生成一個(gè)字典示例

    這篇文章主要介紹了Python使用dict.fromkeys()快速生成一個(gè)字典,結(jié)合實(shí)例形式分析了Python基于dict.fromkeys()生成字典的相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • 利用Pyhton中的requests包進(jìn)行網(wǎng)頁(yè)訪問(wèn)測(cè)試的方法

    利用Pyhton中的requests包進(jìn)行網(wǎng)頁(yè)訪問(wèn)測(cè)試的方法

    今天小編就為大家分享一篇利用Pyhton中的requests包進(jìn)行網(wǎng)頁(yè)訪問(wèn)測(cè)試的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 對(duì)Python中一維向量和一維向量轉(zhuǎn)置相乘的方法詳解

    對(duì)Python中一維向量和一維向量轉(zhuǎn)置相乘的方法詳解

    今天小編就為大家分享一篇對(duì)Python中一維向量和一維向量轉(zhuǎn)置相乘的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python判斷圖片寬度和高度后刪除圖片的方法

    python判斷圖片寬度和高度后刪除圖片的方法

    這篇文章主要介紹了python判斷圖片寬度和高度后刪除圖片的方法,涉及Python中os模塊與Image模塊的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別

    YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別

    這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04
  • 分享Python開(kāi)發(fā)中要注意的十個(gè)小貼士

    分享Python開(kāi)發(fā)中要注意的十個(gè)小貼士

    不管是python開(kāi)發(fā)還是其他什么語(yǔ)言的開(kāi)發(fā),如果在開(kāi)發(fā)中我們能掌握一些有用的貼士和技巧,那么肯定會(huì)大大提高我們的開(kāi)發(fā)效率,今天小編和大家分享的就是python開(kāi)發(fā)中,一些初學(xué)這門(mén)語(yǔ)言常常會(huì)犯的錯(cuò)誤,一起來(lái)看看吧。
    2016-08-08

最新評(píng)論