第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

文件壓縮與解壓縮

壓縮包也是我們平時(shí)工作中經(jīng)常要接觸到的文件格式,壓縮文件后綴名通常有 .zip、.rar、.7z 等等。Python 中也有專門用來(lái)操作壓縮包文件的第三方模塊 zipfile。聽這個(gè)名字就知道是用來(lái)操作壓縮包文件的了,這個(gè)第三方模塊也是我們本節(jié)課的重點(diǎn),下面我們就一起來(lái)看一下。

1. zipfile 模塊介紹

zip 文件格式是通用的文檔壓縮標(biāo)準(zhǔn),在 ziplib 模塊中,提供 ZipFile 類操作 zip 文件,如創(chuàng)建、讀取、寫入、附加、顯示壓縮文件等操作。

1.1 安裝

zipfile 是 Python 的第三方庫(kù),使用前需要通過(guò)以下命令進(jìn)行安裝:

pip install zipfile

1.2 使用步驟

步驟 1:導(dǎo)入 zipfile 模塊

import zipfile

步驟 2:實(shí)例化 zipfile 對(duì)象

z = zipfile.ZipFile(file, mode='r')

打開或者新建一個(gè) zip 文件對(duì)象,第一個(gè)參數(shù)為 file 文件地址,第二個(gè)參數(shù)為打開模式,當(dāng)模式參數(shù)是 ‘r’ 表示讀取現(xiàn)有的文件,為 ‘w’ 表示覆蓋或?qū)懭胍粋€(gè)新的文件,為 ‘a(chǎn)’ 表示將追加到現(xiàn)有文件。

步驟 3:進(jìn)行壓縮文件操作

通過(guò) zipfile 模塊提供的方法對(duì)壓縮文件進(jìn)行創(chuàng)建、讀取、解壓等操作。

步驟 4:關(guān)閉壓縮文件

z = zipfile.ZipFile(file, mode='r')
...省略部分代碼
z.close()

注意:zipfile 在使用后,必須在退出程序之前調(diào)用 close () 方法否則將不會(huì)寫入關(guān)鍵記錄數(shù)據(jù)。

2. 使用 zipfile 模塊進(jìn)行壓縮與解壓縮

現(xiàn)在 D:\code 目錄已有 code.zip,內(nèi)容如下圖所示。

圖片描述

接下來(lái)通過(guò) zipfile 模塊對(duì)壓縮文件進(jìn)行操作,zipfile 模塊操作壓縮文件常用方法見下表。

方法名 描述
namelist() 返回 ZIP 文件內(nèi)所有成員名字列表
write() 添加文件到壓縮包內(nèi)
extract(member[, path[, pwd]]) 解壓?jiǎn)蝹€(gè)文件,參數(shù) members 表示 zipfile 對(duì)象中某個(gè)文件名,path 為解壓到的目的路徑,默認(rèn)是壓縮包所在路徑,pwd 為壓縮包密碼,默認(rèn)無(wú)密碼
extractall([path[, members[, pwd]]]) 解壓所有文件,參數(shù) path 為解壓到的目的路徑,默認(rèn)是壓縮包所在路徑,members 默認(rèn)值是壓縮包文件中所有文件名稱列表,也可以另外指定,pwd 為壓縮包密碼,默認(rèn)無(wú)密碼

下面來(lái)具體看下每個(gè)方法的使用:

  1. namelist () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'))
print(zipFile.namelist())
#輸出: ['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py']

代碼解釋:namelist () 方法獲取壓縮包中所有文件的名字,并組成列表返回。首先通過(guò) ZipFile 實(shí)例化 zip 文件對(duì)象,其中壓縮文件這里通過(guò) OS 模塊的 join 方法進(jìn)行拼接,返回一個(gè)絕對(duì)路徑。通過(guò) namelist () 方法打印輸出:

['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py']
  1. write () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'),'a')
zipFile.write("test.txt")
print(zipFile.namelist())
#輸出: ['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py','code/test.txt']

代碼解釋:write () 方法為添加文件到壓縮文件,在 D:\code 目錄下,創(chuàng)建 test.txt 文件,通過(guò) wirte () 方法添加到現(xiàn)有壓縮文件 code.zip 中,執(zhí)行完成后,通過(guò) namelist () 方法重寫打印壓縮文件中所有成員名字列表,輸出 ['code/', 'code/index.py', 'code/newimage/', 'code/writeppt.py', 'code/writeword.py','code/test.txt']。上述代碼中需要注意:

向壓縮文件中寫入內(nèi)容時(shí),注意修改 zipFile 實(shí)例化處的模式,默認(rèn)為 “r”,表示只讀,不可以寫入,設(shè)置為 “w” 后可以寫入,但會(huì)覆蓋原有壓縮文件中內(nèi)容,如果想要追加,設(shè)置為 “a” 即可。

  1. extract () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'))
for file in zipFile.namelist():
    zipFile.extract(file)
zipFile.close()

代碼解釋:extract () 方法為單個(gè)壓縮文件解壓,代碼中結(jié)合 namelist () 方法將 D:\code\code.zip 進(jìn)行解壓縮操作,解壓后效果如下圖所示。

圖片描述

  1. extractall () 使用:
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'code.zip'))
zipFile.extractall()
zipFile.close()

代碼解釋:extractall () 方法為解壓 zip 文檔中的所有文件到指定目錄,默認(rèn)為壓縮包所在路徑,即當(dāng)前目錄。代碼執(zhí)行完成后,效果同 extract () 結(jié)合 namelist () 方法進(jìn)行解壓操作一樣。

3. zipfile 模塊實(shí)戰(zhàn)

在上一小節(jié)中,使用 os 模塊封裝了程序遇到異常情況時(shí)記錄錯(cuò)誤日志文件的方法,本小節(jié) zipfile 模塊實(shí)戰(zhàn)在上一小節(jié)代碼的基礎(chǔ)上進(jìn)行實(shí)現(xiàn)。

在服務(wù)器上存儲(chǔ)的錯(cuò)誤日志文件,一定周期需要進(jìn)行下載,為了防止下載過(guò)程中出現(xiàn)文件丟失或亂碼的情況,通常采用創(chuàng)建壓縮包的形式。但手動(dòng)創(chuàng)建無(wú)疑是費(fèi)時(shí)費(fèi)力且容易出現(xiàn)錯(cuò)誤的,這時(shí)可以使用 zipfile 模塊結(jié)合 os 模塊,實(shí)現(xiàn)將 2020 年下,每個(gè)月份的錯(cuò)誤日志記錄文件夾,創(chuàng)建相對(duì)的壓縮文件,如 1 月,對(duì)應(yīng) 1.zip,2 月對(duì)應(yīng) 2.zip。目前服務(wù)器上 1-11 月的錯(cuò)誤日志文件存儲(chǔ)結(jié)構(gòu)如下圖所示。

以 1 月為例,1 月文件夾下的文件存儲(chǔ)結(jié)構(gòu)如下圖所示。
圖片描述

圖片描述
根據(jù)上述需求背景,封裝后的代碼如下:

import zipfile
import os
# 制定要生成壓縮文件的路徑
filepath = "./2020"
# 創(chuàng)建壓縮文件
def createzipfile(month):
    # 壓縮包文件名稱
    zipName = month + '.zip'
    f = zipfile.ZipFile(zipName, 'a')
    # 遍歷當(dāng)前文件夾
    for dirpath, dirnames, filenames in os.walk(filepath+"/"+month):
        for filename in filenames:
            f.write(os.path.join(dirpath, filename))
    f.close()
# 遍歷當(dāng)前目錄下的文件夾
for item in os.listdir(filepath):
    # 調(diào)用創(chuàng)建壓縮文件方法
    createzipfile(str(item))

代碼解釋:通過(guò) os.listdir () 方法獲取到要壓縮的目錄下所有的文件夾,即獲取到 1,2,3,4…,在遍歷中調(diào)用 createzipfile () 方法,將文件夾名稱傳入。在 createzipfile () 方法中,使用 zipfile.ZipFile 創(chuàng)建壓縮文件,在向壓縮文件寫入內(nèi)容時(shí),通過(guò) os.walk () 方法對(duì)當(dāng)前月的目錄進(jìn)行遍歷,嵌套 for…in 循環(huán)中,將文件寫入到壓縮文件。代碼執(zhí)行完成后,創(chuàng)建好的壓縮文件如下圖所示。

圖片描述

圖片描述

4. 小結(jié)

本節(jié)課程我們主要學(xué)習(xí)了 zipfile 模塊的使用。本節(jié)課程的重點(diǎn)如下:

  • 了解 zipfile 模塊作用及使用步驟;
  • 掌握 zipfile 模塊中壓縮與解壓縮操作的使用方法;

圖片描述