python3_zipfile_創建壓縮檔案_讀寫注釋
轉載注明來源: 本文鏈接 來自osnosn的博客,寫于 2020-05-08.
- ZipFile的
compression=預設是 ZIP_STORED(僅存盤不壓縮),
所以要指定為ZIP_DEFLATED(zip演算法),或ZIP_LZMA(lzma演算法,壓縮率高,就是慢了點)compresslevel=要py3.7以上才支持,
- 寫入檔案,可以用
write(),或writestr()- 用
write(),就不需要自己設定檔案修改時間了,
- 用
例子1,創建zip,寫注釋,改檔案的mtime
import os
import time
import zipfile
orgfilename='需要壓縮的原始檔案名'
fstat=os.stat(orgfilename) # 獲取檔案修改時間
bname=os.path.basename(orgfilename) #去掉路徑
comment='This is a test comment.\n This is line 2.' #限制65535個位元組
fzip=zipfile.ZipFile(orgfilename+'.zip','w',compression=zipfile.ZIP_DEFLATED) #py<=3.6
#fzip=zipfile.ZipFile(orgfilename+'.zip','w',compression=zipfile.ZIP_DEFLATED,compresslevel=6) #py>=3.7
fzip.comment=comment.encode('utf-8') # bytes,寫入zip本身的comment. 無論什么時候寫入,都是存在zip檔案的末尾,
with open(orgfilename,'rb') as fin:
fzip.writestr('mydir/'+bname,fin.read()) # 把檔案壓縮寫入zip,加了一層目錄mydir在zip中.
finfo=fzip.getinfo('mydir/'+bname) #獲取這個檔案的info
# 因為檔案是通過writestr()寫入的,所以檔案修改時間需要自己設定,否則為當前時間,
finfo.date_time=time.localtime(fstat.st_mtime)[0:6] # 檔案修改時間
finfo.comment=comment.encode('utf-8') #bytes, 寫入對應檔案的comment.實際存在檔案的末尾,
fzip.close() #zip檔案創建完成
例子2,注釋中寫 json 格式
import json
#zip檔案的注釋可以這么用
COMM={}
COMM['d1']=123
COMM['f1']=3.25
COMM['s1']='abcdefg'
comment=json.dumps(COMM,indent=2) #用indent好看點
...
fzip.comment=comment.encode('utf-8') # bytes,寫入zip本身的comment
例子3,讀zip,讀注釋,解壓檔案
import json
import zipfile
from io import BytesIO
zipname='zip的檔案名'
fzip=zipfile.ZipFile(zipname,'r') #打開zip檔案
comm=fzip.comment.decode('utf-8') # zip自身的注釋,讀取速度比較快
print('===> zip comment:')
print(comm)
zipdata=https://www.cnblogs.com/osnosn/p/json.loads(comm) # 獲取comment中的json資料
print('===> data from json:')
print(repr(zipdata))
names=fzip.namelist() #獲取壓縮檔案中的檔案串列
finfo=fzip.getinfo(names[0]) #讀取第一個檔案的屬性
print('===> mtime of file:')
print('%02d-%02d-%02d %02d:%02d:%02d' % finfo.date_time) #檔案修改時間
print('===> comment of file:')
print(finfo.comment.decode('utf-8')) #檔案的注釋
fout=BytesIO(fzip.read(names[0])) #讀取第一個檔案內容,放入記憶體. (也可以解壓到磁盤去)
fzip.close()
...
fout.close()
轉載注明來源: 本文鏈接 來自osnosn的博客.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/148784.html
標籤:Python
上一篇:Python range 資料型別 [學習 Python 必備基礎知識][看此一篇就夠了][range()][range 元素元素檢測、元素索引查找、切片、負索引][檢測 range 物件是否相等]
