首頁 > 軟體

Python壓縮包處理模組zipfile和py7zr操作程式碼

2022-06-26 18:02:01

目前對檔案的壓縮和解壓縮比較常用的格式就是zip格式和7z格式,今天就以一篇文章來融會貫通會該兩個壓縮檔案格式的操作。

一:zipfile的常用操作

1,壓縮檔案

 zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

         引數file表示檔案的路徑;引數mode指示開啟zip檔案的模式,有三種mode

  • 解壓:r
  • 壓縮:w
  • 追加壓縮:a 

預設值為'r',表示讀已經存在的zip檔案,也可以為'w'或'a','w'表示新建一個zip檔案或覆蓋一個已經存在的zip檔案,‘a’表示追加壓縮

下面我們建立一個壓縮檔案result.zip,並壓縮test資料夾下的所有檔案

import zipfile
import os
 
testdir = "D:\FTZ\python_tool\result\test"
filename = "./result.zip"
z = zipfile.ZipFile(filename, 'w')  
for d in os.listdir(testdir):
	z.write(d)
	z.close

當然上面還可以用with的方法開啟

import zipfile
import os
 
testdir = "D:\DPI\python_tool\result\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'w')  as z:
	for d in os.listdir(testdir):
		z.write(d)
		z.close

2,解壓縮檔案

import zipfile
import os
 
testdir = "D:\FTZ\python_tool\result\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'r')  as z:
	z.extractall(testdir)

需要注意的是有些壓縮包解壓是有密碼,這時候呼叫extractall的時候也支援輸入密碼,在python3中,解壓檔案的密碼引數 pwd 接收的是二進位制的值,所以要在前面加一個 b

z.extractall(testdir,pwd=b"ftz")

3,列出壓縮包裡的所有檔案

import zipfile
import os
testdir = "D:\DPI\python_tool\result\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'r')  as z:
	files = z.namelist()
	print(files)

執行結果如下,返回的是一個列表:

 4,其他常用的方法

import zipfile
import os
 
testdir = "D:\ftz\python_tool\result\test"
filename = "./result.zip"
with zipfile.ZipFile(filename, 'r')  as z:
	z.setpassword(b'ftz1')  #設定zip檔案的密碼。
	z.printdir()     #將zip檔案內的資訊列印到控制檯上。
	data = z.read('file.yaml')  #獲取zip檔案內指定檔案的二進位制資料
	print(data) 
	info = z.getinfo('file.yaml')  #方法返回的是一個ZipInfo物件,表示zip檔案中相應檔案的資訊。它支援如下屬性
	print("獲取檔名稱:",info.filename)
	print("獲取檔案最後修改時間:",info.date_time)
	print("獲取壓縮型別:",info.compress_type)
	print("獲取壓縮後的大小:",info.compress_size)
	print("獲取未壓縮的檔案大小:",info.file_size)
 
print("判斷是否是壓縮檔案:",zipfile.is_zipfile(filename))

執行結果如下:

File Name                                             Modified             Size
data_yaml.yaml                                 2022-06-25 10:50:42          198
file.yaml                                      2022-06-25 10:13:46          123
vnfname.txt                                    2022-01-14 11:27:56         9320
b'xe4xb8x80xe7xbaxa7xe6xa0x87xe9xa2x98:n    xe4xbax8cxe7xbaxa7xe6xa0x87xe9xa2x981:n        b:1n        c:2n        a:3n    xe4xbax8cxe7xbaxa7xe6xa0x87xe9xa2x982:n        f:7n        t:8n        z:9'
獲取檔名稱: file.yaml
獲取檔案最後修改時間: (2022, 6, 25, 10, 13, 46)
獲取壓縮型別: 0
獲取壓縮後的大小: 123
獲取未壓縮的檔案大小: 123
判斷是否是壓縮檔案: True
[Finished in 0.2s]

當然getinfo也支援其他的屬性,下面給出比較全的屬性和方法

ZipInfo.filename: 獲取檔名稱。

ZipInfo.date_time: 獲取檔案最後修改時間。返回一個包含6個元素的元組:(年, 月, 日, 時, 分, 秒)

ZipInfo.compress_type: 壓縮型別。

ZipInfo.comment: 檔案說明。

ZipInfo.extr: 擴充套件項資料。

ZipInfo.create_system: 獲取建立該zip檔案的系統。

ZipInfo.create_version: 獲取 建立zip檔案的PKZIP版本。

ZipInfo.extract_version: 獲取 解壓zip檔案所需的PKZIP版本。

ZipInfo.reserved: 預留欄位,當前實現總是返回0。

ZipInfo.flag_bits: zip標誌位。

ZipInfo.volume: 檔案頭的卷標。

ZipInfo.internal_attr: 內部屬性。

ZipInfo.external_attr: 外部屬性。

ZipInfo.header_offset: 檔案頭偏移位。

ZipInfo.CRC: 未壓縮檔案的CRC-32。

ZipInfo.compress_size: 獲取壓縮後的大小。

ZipInfo.file_size: 獲取未壓縮的檔案大小。

 二:py7zr的常用操作

 1,壓縮檔案

import py7zr
 
with py7zr.SevenZipFile('target.7z', 'w') as archive:
    archive.writeall('/path/to/base_dir', 'base')

如果想設定密碼壓縮

import py7zr
 
with py7zr.SevenZipFile('target.7z', 'w', password='secret') as archive:
    archive.writeall('/path/to/base_dir', 'base')

2,解壓縮檔案

import py7zr
 
archive = py7zr.SevenZipFile('sample.7z', mode='r')
archive.extractall(path="/tmp")
archive.close()

也支援with模式

import py7zr
 
with py7zr.SevenZipFile('sample.7z', mode='r') as z:
    z.extractall()
 
with py7zr.SevenZipFile('target.7z', 'w') as z:
    z.writeall('./base_dir')

py7z也支援提取某個檔案或者符合正則匹配的檔案

import py7zr
import re
 
filter_pattern = re.compile(r'<your/target/file_and_directories/regex/expression>')
with SevenZipFile('archive.7z', 'r') as archive:
    allfiles = archive.getnames()
    selective_files = [f for f in allfiles if filter_pattern.match(f)]
    archive.extract(targets=selective_files)

支援解壓縮加密的7z檔案

import py7zr
 
with py7zr.SevenZipFile('encrypted.7z', mode='r', password='secret') as z:
    z.extractall()

到此這篇關於Python壓縮包處理模組zipfile和py7zr的文章就介紹到這了,更多相關Python zipfile和py7zr壓縮包模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com