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()