這篇文章主要講解了“python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本”吧!
創(chuàng)新互聯(lián)專注于達(dá)茂旗網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供達(dá)茂旗營(yíng)銷(xiāo)型網(wǎng)站建設(shè),達(dá)茂旗網(wǎng)站制作、達(dá)茂旗網(wǎng)頁(yè)設(shè)計(jì)、達(dá)茂旗網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造達(dá)茂旗網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供達(dá)茂旗網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。應(yīng)用場(chǎng)景:配置文件由于升級(jí)改動(dòng)了,我們想看看升級(jí)后的配置文件相對(duì)于之前的改動(dòng)了哪些配置項(xiàng)
注意:這個(gè)腳本只能檢測(cè)的配置文件是鍵值對(duì)的形式,就是key=value的形式
我在網(wǎng)上找了好久沒(méi)找到這一塊的案例,大部分都是用一些difflib庫(kù)做的可視化對(duì)比,所以自己嘗試寫(xiě)了一個(gè)
# 該腳本實(shí)現(xiàn)兩個(gè)配置文件中,新文件相對(duì)于舊文件的增刪改的配置項(xiàng)輸出功能 # 配置文件必須是key = value的形式 import re import sys def data2list(file_stream): """ 生成器 :param file_stream:接收打開(kāi)的文件對(duì)象 :return: """ for line in file_stream: line = line.strip() if line == "" or line.startswith("#"): #過(guò)濾空行和注釋 continue line = line.split(" = ",1) #每行轉(zhuǎn)為列表 line2tuple = tuple(line) #列表轉(zhuǎn)元組 yield line2tuple #每次返回一個(gè)元組 def line_count(keywords, filename): """ :param keywords: 對(duì)比舊文件,在新文件中改變值的鍵名或新增的鍵 :return: 返回鍵所在的行號(hào) :filename 文件名稱 """ with open(filename) as fp: for index, line in enumerate(fp): if keywords in line: return index+1 #比較新文件中配置型值改變的和新增的配置 def compare_config(): """ 遍歷新文件中的每個(gè)鍵是否在舊文件中存在,如果存在,則比較值是否相同,不相同則打印配置更新,和所在的位置 否則視為在新文件中新增的項(xiàng) :return: """ global dict1,dict2 for k2 in dict2.keys(): k1 = list(dict1.keys()) if k2 in k1: if dict2[k2] != dict1[k2]: count = line_count(k2, file2) print("配置項(xiàng)值更新:%s=%s-->%s=%s,位置在第%s行" %(k2, dict1[k2],k2, dict2[k2], count)) else: count = line_count(k2,file2) print("新增配置項(xiàng):%s=%s,位置在第%s行" %(k2, dict2[k2], count)) # 新文件中刪除了哪些項(xiàng),在舊文件中有,在新文件中沒(méi)有的項(xiàng) set1 = set(dict1.keys()) set2 = set(dict2.keys()) deleteKeys = set1 - set2 for k1 in deleteKeys: count = line_count(k1, file1) print("新文件中刪除了以下配置:%s=%s,位置在舊文件中的第%s行" %(k1, dict1[k1],count)) if __name__ == '__main__': try: file1 = sys.argv[1] file2 = sys.argv[2] except: print("userage:xxx.py oldfile newfile") sys.exit(1) fp1 = open(file1) fp2 = open(file2) #通過(guò)生成器的具有迭代器特點(diǎn),遍歷來(lái)生成一個(gè)列表,列表中嵌套了數(shù)組,每個(gè)數(shù)組里面村了每行的數(shù)據(jù) gen1 = data2list(fp1) list1 = [] for i in gen1: list1.append(i) dict1 = dict(list1) # dict函數(shù)可以把列表中嵌套的元組轉(zhuǎn)為字典 gen2 = data2list(fp2) list2 = [] for i in gen2: list2.append(i) dict2 = dict(list2) fp1.close() fp2.close() compare_config()
測(cè)試結(jié)果如下:
準(zhǔn)備兩個(gè)文件
file1
file2:
運(yùn)行: config_compare.py file1 file2
輸出比較結(jié)果:
配置項(xiàng)值更新:age=19-->age=20,位置在第3行
配置項(xiàng)值更新:gender=man-->gender=female,位置在第4行
配置項(xiàng)值更新:apple=5-->apple=6,位置在第6行
新增配置項(xiàng):peach=2,位置在第9行
新增配置項(xiàng):hello=world,位置在第11行
新增配置項(xiàng):language=english,位置在第12行
新文件中刪除了以下配置:banana=3,位置在舊文件中的第8行
新文件中刪除了以下配置:name=wangtao,位置在舊文件中的第2行
感謝各位的閱讀,以上就是“python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站欄目:python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://m.rwnh.cn/article26/dsdgjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)