<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
目前對檔案的壓縮和解壓縮比較常用的格式就是zip格式和7z格式,今天就以一篇文章來融會貫通會該兩個壓縮檔案格式的操作。
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
引數file表示檔案的路徑;引數mode指示開啟zip檔案的模式,有三種mode
預設值為'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
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")
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)
執行結果如下,返回的是一個列表:
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: 獲取未壓縮的檔案大小。
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')
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!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45