Python 輸出兩個文件夾修改過的文件用於增量更新

遊戲客戶端發佈版本,經常會用到

# 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 輸出的增量包路徑

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章