現(xiàn)在對(duì)文件信息壓縮和解壓縮較為常見(jiàn)的文件格式便是zrar格式和7z文件格式,本文關(guān)鍵講了Python壓縮包解決控制模塊zipfile和py7zr,必須的小伙伴可以借鑒一下
現(xiàn)在對(duì)文件信息壓縮和解壓縮較為常見(jiàn)的文件格式便是zrar格式和7z文件格式,現(xiàn)在就以篇文章來(lái)融匯貫通會(huì)該2個(gè)壓縮文件格式操作。
一:zipfile的常見(jiàn)實(shí)際操作
1,壓縮包
zipfile.ZipFile(file[,mode[,compression[,allowZip64]]])
主要參數(shù)file表示文檔的路線(xiàn);主要參數(shù)mode標(biāo)示開(kāi)啟zip文件的方式,主要有三種mode
緩解壓力:r
縮?。簑
增加縮?。篴
初始值為'r',表明讀早已存有的zip文件,還可以為'w'或'a','w'表明新創(chuàng)建一個(gè)zip文檔或涵蓋1個(gè)早已存有的zip文檔,‘a(chǎn)’表明增加縮小
下面我們就構(gòu)建一個(gè)壓縮包result.zip,并縮小test文件夾中的所有文件夾
import zipfile import os testdir="D:FTZpython_toolresulttest" filename="./result.zip" z=zipfile.ZipFile(filename,'w') for d in os.listdir(testdir): z.write(d) z.close 當(dāng)然上面還可以用with的方法打開(kāi) import zipfile import os testdir="D:DPIpython_toolresulttest" 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:FTZpython_toolresulttest" filename="./result.zip" with zipfile.ZipFile(filename,'r')as z: z.extractall(testdir)
需要注意的是有些壓縮包解壓是有密碼,這時(shí)候調(diào)用extractall的時(shí)候也支持輸入密碼,在python3中,解壓文件的密碼參數(shù)pwd接收的是二進(jìn)制的值,所以要在前面加一個(gè)b
z.extractall(testdir,pwd=b"ftz")
3,列出壓縮包里的所有文件
import zipfile import os testdir="D:DPIpython_toolresulttest" filename="./result.zip" with zipfile.ZipFile(filename,'r')as z: files=z.namelist() print(files)
運(yùn)行結(jié)果如下,返回的是一個(gè)列表:
4,其他常用的方法
import zipfile import os testdir="D:ftzpython_toolresulttest" filename="./result.zip" with zipfile.ZipFile(filename,'r')as z: z.setpassword(b'ftz1')#設(shè)置zip文檔的密碼。 z.printdir()#將zip文檔內(nèi)的信息打印到控制臺(tái)上。 data=z.read('file.yaml')#獲取zip文檔內(nèi)指定文件的二進(jìn)制數(shù)據(jù) print(data) info=z.getinfo('file.yaml')#方法返回的是一個(gè)ZipInfo對(duì)象,表示zip文檔中相應(yīng)文件的信息。它支持如下屬性 print("獲取文件名稱(chēng):",info.filename) print("獲取文件最后修改時(shí)間:",info.date_time) print("獲取壓縮類(lèi)型:",info.compress_type) print("獲取壓縮后的大?。?quot;,info.compress_size) print("獲取未壓縮的文件大?。?quot;,info.file_size) print("判斷是否是壓縮文件:",zipfile.is_zipfile(filename))
運(yùn)行結(jié)果如下:
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:nxe4xbax8cxe7xbaxa7xe6xa0x87xe9xa2x981:n b:1n c:2n a:3nxe4xbax8cxe7xbaxa7xe6xa0x87xe9xa2x982:n f:7n t:8n z:9'
獲取文件名稱(chēng):file.yaml
獲取文件最后修改時(shí)間:(2022,6,25,10,13,46)
獲取壓縮類(lèi)型:0
獲取壓縮后的大?。?23
獲取未壓縮的文件大小:123
判斷是否是壓縮文件:True
[Finished in 0.2s]
當(dāng)然getinfo也支持其他的屬性,下面給出比較全的屬性和方法
ZipInfo.filename:獲取文件名稱(chēng)。
ZipInfo.date_time:獲取文件最后修改時(shí)間。返回一個(gè)包含6個(gè)元素的元組:(年,月,日,時(shí),分,秒)
ZipInfo.compress_type:壓縮類(lèi)型。
ZipInfo.comment:文檔說(shuō)明。
ZipInfo.extr:擴(kuò)展項(xiàng)數(shù)據(jù)。
ZipInfo.create_system:獲取創(chuàng)建該zip文檔的系統(tǒng)。
ZipInfo.create_version:獲取創(chuàng)建zip文檔的PKZIP版本。
ZipInfo.extract_version:獲取解壓zip文檔所需的PKZIP版本。
ZipInfo.reserved:預(yù)留字段,當(dāng)前實(shí)現(xiàn)總是返回0。
ZipInfo.flag_bits:zip標(biāo)志位。
ZipInfo.volume:文件頭的卷標(biāo)。
ZipInfo.internal_attr:內(nèi)部屬性。
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') 如果想設(shè)置密碼壓縮 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也支持提取某個(gè)文件或者符合正則匹配的文件
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()
綜上所述,這篇文章就給大家介紹到這里了,希望可以給各位讀者帶來(lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/129071.html
摘要:同時(shí)無(wú)論在哪種平臺(tái)上,都可以用進(jìn)行系統(tǒng)編程。這樣導(dǎo)入模塊并使用生成隨機(jī)數(shù)中的模塊提供了生成隨機(jī)數(shù)的函數(shù)。生成的隨機(jī)數(shù)介于和之間??梢詮淖约憾x的范圍中生成一個(gè)隨機(jī)數(shù),如下所示操作日期和時(shí)間你可以從日期中提取所需的值,如下所示。 翻譯:瘋狂的技術(shù)宅https://likegeeks.com/python-... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 ...
摘要:通過(guò)內(nèi)置的模塊實(shí)現(xiàn)對(duì)文件的解壓,加點(diǎn)料完成口令破解模塊基本使用使用壓縮文件創(chuàng)建一個(gè)文件對(duì)象,壓縮是需要把改為將文件寫(xiě)入文件中,即將文件壓縮將文件對(duì)象關(guān)閉使用解壓文件解壓準(zhǔn)備階段首先你需要一個(gè)壓縮文件,并且給它加上密碼,樣子長(zhǎng)成這樣然后你就成 通過(guò)Python內(nèi)置的zipfile模塊實(shí)現(xiàn)對(duì)zip文件的解壓,加點(diǎn)料完成口令破解 zipfile模塊基本使用 使用zipfile壓縮文件 imp...
摘要:模塊里有兩個(gè)非常重要的分別是和。返回一個(gè)對(duì)象,它包括文件的詳細(xì)信息。將文檔內(nèi)的指定文件解壓到當(dāng)前目錄。為文件路徑,為添加到文檔之后保存的名稱(chēng)參數(shù)表示壓縮方法,它的值可以是或。預(yù)留字段,當(dāng)前實(shí)現(xiàn)總是返回。 ZipFile模塊里有兩個(gè)非常重要的class, 分別是 ZipFile和ZipInfo。ZipFile是主要的類(lèi),用來(lái)創(chuàng)建和讀取zip文件,而ZipInfo是存儲(chǔ)的zip文件的每個(gè)文...
摘要:最近這段時(shí)間遇到了一個(gè)問(wèn)題,直接打開(kāi)壓縮包文件后,用讀后,用進(jìn)行遍歷時(shí),會(huì)提示。出問(wèn)題的代碼是這樣的的英文縮寫(xiě)是分析原因后,主要是因?yàn)樽x進(jìn)來(lái)的內(nèi)容是類(lèi)型,讀進(jìn)去的類(lèi)型也是,造成無(wú)法遍歷。 最近這段時(shí)間遇到了一個(gè)問(wèn)題,直接打開(kāi)壓縮包文件后,用csv.reader讀后,用for in 進(jìn)行遍歷時(shí),會(huì)提示:iterator should return strings not bytes (...
閱讀 1066·2023-01-14 11:38
閱讀 1061·2023-01-14 11:04
閱讀 901·2023-01-14 10:48
閱讀 2377·2023-01-14 10:34
閱讀 1147·2023-01-14 10:24
閱讀 1026·2023-01-14 10:18
閱讀 654·2023-01-14 10:09
閱讀 733·2023-01-14 10:02