python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本-創(chuàng)新互聯(lián)

這篇文章主要講解了“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)銷型網(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)銷落地服務(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ì)比,所以自己嘗試寫了一個(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
python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本
file2:
python3怎么實(shí)現(xiàn)配置文件差異對(duì)比腳本
運(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://bm7419.com/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)

網(wǎng)站托管運(yùn)營(yíng)