# -*- coding:utf-8 -*-
# =================================================
#
# brief : 制作viruswall 的离线升级数据
#
# author : hechangmin
#
# date : 2008.6
#
# ==================================================
import os
import threading, zipfile
class AsyncZip(threading.Thread):
def __init__ (self, infile, outfile):
threading.Thread. __init__ (self)
self.infile = infile
self.outfile = outfile
def run(self):
state = ' w '
if os.path.isfile(self.outfile) == True:
state = ' a '
f = zipfile.ZipFile(self.outfile, state, zipfile.ZIP_DEFLATED)
f.write(self.infile)
f.close()
print ' Finished background zip of: ' , self.infile
def zipDir(src,dst):
initPath = os.getcwd()
tempDST = os.path.join(os.getcwd(),dst)
tempSRC = os.path.join(os.getcwd(),src)
os.chdir( tempSRC )
files = os.listdir(os.curdir)
print files
for file in files:
background = AsyncZip(file,dst)
background.start()
background.join() # Wait for the background task to finish
os.chdir( initPath )
print os.getcwd()
# test ok
if __name__ == ' __main__ ' :
zipDir( " D:AutoUpdateDataDistviruswallDataKSVW-VirusDB " , " d:AutoUpdateDataDistviruswallDataupdateKSVW-VirusDB.tgz " )
显然这里压缩成功了,但是压缩采用的是zip算法。
还希望是采用 tar+ gzip 的方式。
加入tar中间过程:
# -*- coding:utf-8 -*-
# ===============================================
#
# brief : 制作viruswall 的离线升级数据
#
# author : hechangmin
#
# date : 2008.6
#
# notice : 先变成tar 文件
# ===============================================
import os
import threading, zipfile
import tarfile
class AsyncZip(threading.Thread):
def __init__ (self, infile, outfile):
threading.Thread. __init__ (self)
self.infile = infile
self.outfile = outfile
def run(self):
state = ' w '
if os.path.isfile(self.outfile) == True:
state = ' a '
f = zipfile.ZipFile(self.outfile, state, zipfile.ZIP_DEFLATED)
f.write(self.infile)
f.close()
print ' Finished background zip of: ' , self.infile
def zipDir(src,dst):
initPath = os.getcwd()
tempDST = os.path.join(os.getcwd(),dst)
tempSRC = os.path.join(os.getcwd(),src)
os.chdir( tempSRC )
files = os.listdir(os.curdir)
tar = tarfile.open( " temp.tar " , " w " )
for file in files:
tar.add(file)
tar.close()
background = AsyncZip( " temp.tar " ,dst)
background.start()
background.join() # Wait for the background task to finish
os.chdir( initPath )
print os.getcwd()
# test ok
if __name__ == ' __main__ ' :
zipDir( " D:AutoUpdateDataDistviruswallDataKSVW-VirusDB " , " d:AutoUpdateDataDistviruswallDataupdateKSVW-VirusDB.tgz " )
当然还不够,虽然加入了tar环节,但是最后还是zip压缩。
tar+gzip:
# -*- coding:utf-8 -*-
#=================================================
#
# brief : 制作viruswall 的离线升级数据
#
# author : hechangmin
#
# date : 2008.6
#
# notice : 先变成tar 文件
#==================================================
import os
import tarfile
import gzip
import string
import shutil
def zipDir(src,dst):
initPath = os.getcwd()
#tempDST = os.path.join(os.getcwd(),dst)
#tempSRC = os.path.join(os.getcwd(),src)
os.chdir( src )
files = os.listdir(src)
if dst.find("") != -1:
temp = dst.rsplit("",1)
dstname = temp[1]
dstpath = temp[0]
#print files
tar = tarfile.open(dstname,"gz")
for file in files:
tar.add(file)
tar.close()
os.chdir( initPath )
if os.path.isfile(dst) == True:
os.remove(dst)
shutil.copy(os.path.join(src,dstname), dst)
os.remove(os.path.join(src,dstname))
print os.getcwd()
#test ok
if __name__ == '__main__':
zipDir("D:AutoUpdateDataDistviruswallDataKSVW-VirusDB","d:AutoUpdateDataDistviruswallDataupdateKSVW-VirusDB.tgz")
#当然我发现里面的tar 名字不用,于是就搞一个改名的逻辑在里面,具体代码省略。