遊戲客戶端發佈版本,經常會用到
# coding=gbk
import os,configparser
import shutil
import hashlib
'''
獲取文件md5碼
'''
def get_file_md5(f):
m = hashlib.md5()
while True:
data = f.read(1024) #將文件分塊讀取
if not data:
break
m.update(data)
return m.hexdigest()
'''
遞歸列出某目錄下的文件,放入List中
'''
def listDir (fileList,path):
files=os.listdir(path)
for i in files:
file_path=path+"\\"+i
if os.path.isfile(file_path):
fileList.append(file_path)
for i in files:
file_path=path+"\\"+i
if os.path.isdir(file_path):
#fileList.append(file_path)
listDir(fileList,file_path)
return fileList
'''
將List中內容寫入文件
'''
def writeListToFile(list,path):
strs="\n".join(list)
f=open(path,'wb')
f.write(strs.encode())
f.close()
'''
讀入文件內容並放入List中
'''
def readFileToList(path):
lists=[]
f=open(path,'rb')
lines=f.readlines()
for line in lines:
lists.append(line.strip())
f.close()
return lists
'''
比較文件--以Set方式
'''
def compList(list1,list2):
return list(set(list1)-set(list2))
def release(sdir,tdir,outdir):
for parent, dirnames, filenames in os.walk(sdir,followlinks=True):
for filename in filenames:
file_path = os.path.join(parent, filename)
#print('文件名:%s' % filename)
#print('文件完整路徑:%s\n' % file_path)
xdpath = file_path.replace(sdir,"")
#print('文件相對路徑:%s\n' % xdpath)
topath = tdir + xdpath
#文件大小判斷
if not os.path.exists(topath) or (os.path.exists(topath) and os.path.getsize(topath)!=os.path.getsize(file_path)):
#最近修改時間判斷
#if not os.path.exists(topath) or (os.path.exists(topath) and os.path.getmtime(topath)<os.path.getmtime(file_path)):
print ("正在複製文件:"+xdpath)
outfile = outdir+xdpath
dirpath = os.path.dirname(outfile)
if not os.path.exists(dirpath):
os.makedirs(dirpath)
shutil.copyfile(file_path,outfile)
if __name__ == '__main__':
cfFile="rconfig.ini";#配置文件文件名
#讀取配置文件
if(os.path.exists(cfFile)):
cf=configparser.ConfigParser()
cf.read(cfFile)
sdir=cf.get("main", "sourceDir")
tdir=cf.get("main","targetDir")
outdir=cf.get("main","outDir")
release(sdir,tdir,outdir)
else:
print ("配置文件不存在!")
input("\n按 回車鍵 退出\n")
exit()
rconfig.ini
[main]
sourceDir=E:\proj\mir\pf\bin-release\gamerelease
targetDir=E:\proj\pf\client\game
outDir=test/3
sourceDir 爲新發布的版本,targetDir 爲目前版本,outDir 輸出的增量包路徑