18-zip壓縮

zipfile zip文件操作

import zipfile

zip文件格式是通用的文檔壓縮標準余爆,在ziplib模塊中剃斧,使用ZipFile類來操作zip文件缎患,下面具體介紹一下:

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

創(chuàng)建一個ZipFile對象滞欠,表示一個zip文件。
參數(shù)file表示文件的路徑或類文件對象(file-like object)雹洗;
參數(shù)mode指示打開zip文件的模式,默認值為’r’卧波,表示讀已經(jīng)存在的zip文件时肿,也可以為’w’或’a’,’w’表示新建一個zip文檔或覆蓋一個已經(jīng)存在的zip文檔港粱,’a’表示將數(shù)據(jù)附加到一個現(xiàn)存的zip文檔中螃成。
參數(shù)compression表示在寫zip文檔時使用的壓縮方法旦签,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。
如果要操作的zip文件大小超過2G寸宏,應(yīng)該將allowZip64設(shè)置為True宁炫。

ZipFile還提供了如下常用的方法和屬性:

ZipFile.getinfo(name):

獲取zip文檔內(nèi)指定文件的信息。返回一個zipfile.ZipInfo對象氮凝,它包括文件的詳細信息羔巢。將在下面 具體介紹該對象。

ZipFile.infolist()

獲取zip文檔內(nèi)所有文件的信息罩阵,返回一個zipfile.ZipInfo的列表竿秆。

ZipFile.namelist()

獲取zip文檔內(nèi)所有文件的名稱列表。

ZipFile.extract(member[, path[, pwd]])

將zip文檔內(nèi)的指定文件解壓到當前目錄稿壁。
參數(shù)member指定要解壓的文件名稱或?qū)?yīng)的ZipInfo對象幽钢;
參數(shù)path指定了解析文件保存的文件夾;參數(shù)pwd為解壓密碼傅是。
下面一個例子將保存在程序根目錄下的txt.zip內(nèi)的所有文件解壓到D:/Work目錄:

Python

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
for file in zipFile.namelist():
    zipFile.extract(file, r'd:/Work')
zipFile.close()

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
for file in zipFile.namelist():
    zipFile.extract(file, r'd:/Work')
zipFile.close()

ZipFile.extractall([path[, members[, pwd]]])

解壓zip文檔中的所有文件到當前目錄搅吁。參數(shù)members的默認值為zip文檔內(nèi)的所有文件名稱列表,也可以自己設(shè)置落午,選擇要解壓的文件名稱谎懦。

ZipFile.printdir()

將zip文檔內(nèi)的信息打印到控制臺上。

ZipFile.setpassword(pwd)

設(shè)置zip文檔的密碼溃斋。

ZipFile.read(name[, pwd])

獲取zip文檔內(nèi)指定文件的二進制數(shù)據(jù)界拦。
下面的例子演示了read()的使用,zip文檔內(nèi)包括一個txt.txt的文本文件梗劫,使用read()方法讀取其二進制數(shù)據(jù)享甸,然后保存到D:/txt.txt。

Python


import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
data = zipFile.read('txt.txt')
(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data)  #一行語句就完成了寫文件操作梳侨。仔細琢磨哦~_~
zipFile.close()

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
data = zipFile.read('txt.txt')
(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data)  #一行語句就完成了寫文件操作蛉威。仔細琢磨哦~_~
zipFile.close()

ZipFile.write(filename[, arcname[, compress_type]])

將指定文件添加到zip文檔中。
filename為文件路徑走哺,arcname為添加到zip文檔之后保存的名稱, 參數(shù)compress_type表示壓縮方法蚯嫌,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。
下面的例子演示了如何創(chuàng)建一個zip文檔丙躏,并將文件D:/test.doc添加到壓縮文檔中择示。

ZipFile.writestr(zinfo_or_arcname, bytes)

writestr()支持將二進制數(shù)據(jù)直接寫入到壓縮文檔。

ZipFile.getinfo(name) 方法返回的是一個ZipInfo對象晒旅,表示zip文檔中相應(yīng)文件的信息栅盲。它支持如下屬性:

ZipInfo.filename: 獲取文件名稱。
ZipInfo.date_time: 獲取文件最后修改時間废恋。返回一個包含6個元素的元組:(年, 月, 日, 時, 分, 秒)
ZipInfo.compress_type: 壓縮類型谈秫。
ZipInfo.comment: 文檔說明扒寄。
ZipInfo.extr: 擴展項數(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ù)留字段构灸,當前實現(xiàn)總是返回0上渴。
ZipInfo.flag_bits: zip標志位。
ZipInfo.volume: 文件頭的卷標喜颁。
ZipInfo.internal_attr: 內(nèi)部屬性稠氮。
ZipInfo.external_attr: 外部屬性。
ZipInfo.header_offset: 文件頭偏移位半开。
ZipInfo.CRC: 未壓縮文件的CRC-32隔披。
ZipInfo.compress_size: 獲取壓縮后的大小。
ZipInfo.file_size: 獲取未壓縮的文件大小寂拆。

下面一個簡單的例子說明這些屬性的意思:

Python

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
zipInfo = zipFile.getinfo('doc.doc')
print 'filename:', zipInfo.filename
print 'date_time:', zipInfo.date_time
print 'compress_type:', zipInfo.compress_type
print 'comment:', zipInfo.comment
print 'extra:', zipInfo.extra
print 'create_system:', zipInfo.create_system
print 'create_version:', zipInfo.create_version
print 'extract_version:', zipInfo.extract_version
print 'extract_version:', zipInfo.reserved
print 'flag_bits:', zipInfo.flag_bits
print 'volume:', zipInfo.volume
print 'internal_attr:', zipInfo.internal_attr
print 'external_attr:', zipInfo.external_attr
print 'header_offset:', zipInfo.header_offset
print 'CRC:', zipInfo.CRC
print 'compress_size:', zipInfo.compress_size
print 'file_size:', zipInfo.file_size
zipFile.close()

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
zipInfo = zipFile.getinfo('doc.doc')
print 'filename:', zipInfo.filename
print 'date_time:', zipInfo.date_time
print 'compress_type:', zipInfo.compress_type
print 'comment:', zipInfo.comment
print 'extra:', zipInfo.extra
print 'create_system:', zipInfo.create_system
print 'create_version:', zipInfo.create_version
print 'extract_version:', zipInfo.extract_version
print 'extract_version:', zipInfo.reserved
print 'flag_bits:', zipInfo.flag_bits
print 'volume:', zipInfo.volume
print 'internal_attr:', zipInfo.internal_attr
print 'external_attr:', zipInfo.external_attr
print 'header_offset:', zipInfo.header_offset
print 'CRC:', zipInfo.CRC
print 'compress_size:', zipInfo.compress_size
print 'file_size:', zipInfo.file_size
zipFile.close()

案列

zip的操作demo

    #導(dǎo)入zip壓縮模塊
    import zipfile
    
    ''''''
    #--------------------------壓縮操作
    #打開新建壓縮文件 解壓文件操作
    zp = zipfile.ZipFile('D:\\ziptest.zip','w')
    
    #加密操作 (目前加密操作 在python里是收費)
    zp.setpassword('123456'.encode())
    
    #將文件或者文件夾添加到壓縮文件當中   前面參數(shù) 是具體文件路徑奢米,后面參數(shù)是壓縮后的文件內(nèi)容
    zp.write('D:\\FeiQ.exe','fq.exe')
    zp.write('D:\\format.pdf','my.pdf')
    zp.write('D:\\jsq.py','.\\mydir\\jsq.py')
    
    #關(guān)閉壓縮文件
    zp.close()



    #-------------------------解壓操作
    
    #打開壓縮文件
    zp = zipfile.ZipFile('D:\\ziptest.zip','r')
    
    #解壓操作(解壓所有內(nèi)容)
    #zp.extractall('C:\\Users\\xdl\\Desktop')
    
    #解壓指定內(nèi)容 (參數(shù)1:壓縮包里的單個文件名;參數(shù)2:解壓后存放位置
    zp.extract('fq.exe','C:\\Users\\xdl\\Desktop')
    
    #關(guān)閉文件
    zp.close()
    
    
    #查看壓縮文件信息
    zp = zipfile.ZipFile('D:\\ziptest.zip','r')
    
    #獲取指定文件的信息
    #result = zp.getinfo('fq.exe')
    #print(result)
    
    #獲取所有信息列表
    #result = zp.infolist()
    #print(result)
    
    #獲取名稱列表
    #result = zp.namelist()
    #print(result)
    
    zp.close()

tar的操作demo

    import tarfile

    #---------------壓縮解壓文件操作
    #創(chuàng)建或者打開壓縮文件
    tp = tarfile.TarFile('D:\\myfile.tar','w')
        
    #添加文件
    tp.add('D:\\Program Files\\Youdao\\YoudaoNote\\DocToPDF.exe',arcname = 'dtpdf.exe')
    tp.add('D:\\Program Files\\Youdao\\YoudaoNote\\ieext_btn.htm',arcname = 'ie.html')
    tp.add('D:\\Program Files\\Youdao\\YoudaoNote\\icudtl.dat',arcname = 'ABC/ic.dat')
        
    #關(guān)閉壓縮文件
    tp.close()  
    
    #----------------解壓操作
    
    #打開文件
    tp = tarfile.TarFile('D:\\myfile.tar','r')
    
    #解壓文件 所有
    #tp.extractall('C:/Users/xdl/Desktop')
    
    #解壓單個文件
    tp.extract('ie.html','C:/Users/xdl/Desktop')
    
    #關(guān)閉文件
    tp.close()
    #=====
    tf = tarfile.TarFile('D:\\myfile.tar','r')
    #獲取指定的單個壓縮文件信息
    re = tf.getinfo('1.txt')
    print(re)
    
    #查看所有壓縮信息
    re2 = tf.infolist()
    print(re2)
    #查看所有的壓縮文件名稱(列表)
    re3 = tf.namelist()
    tf.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纠永,一起剝皮案震驚了整個濱河市鬓长,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尝江,老刑警劉巖涉波,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炭序,居然都是意外死亡啤覆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門惭聂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窗声,“玉大人,你說我怎么就攤上這事辜纲”棵伲” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵侨歉,是天一觀的道長屋摇。 經(jīng)常有香客問我,道長幽邓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任火脉,我火速辦了婚禮牵舵,結(jié)果婚禮上柒啤,老公的妹妹穿的比我還像新娘。我一直安慰自己畸颅,他們只是感情好担巩,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著没炒,像睡著了一般涛癌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上送火,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天拳话,我揣著相機與錄音,去河邊找鬼种吸。 笑死弃衍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的坚俗。 我是一名探鬼主播镜盯,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猖败!你這毒婦竟也來了速缆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤恩闻,失蹤者是張志新(化名)和其女友劉穎激涤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體判呕,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡倦踢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侠草。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辱挥。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖边涕,靈堂內(nèi)的尸體忽然破棺而出晤碘,到底是詐尸還是另有隱情,我是刑警寧澤功蜓,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布园爷,位于F島的核電站,受9級特大地震影響式撼,放射性物質(zhì)發(fā)生泄漏童社。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一著隆、第九天 我趴在偏房一處隱蔽的房頂上張望扰楼。 院中可真熱鬧呀癣,春花似錦、人聲如沸弦赖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹬竖。三九已至沼沈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間币厕,已是汗流浹背列另。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劈榨,地道東北人访递。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像同辣,于是被迫代替她去往敵國和親拷姿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容