国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

批量修改OC類名腳本 -- python

cc17 / 950人閱讀

摘要:前言近日由于種種原因,需要把代碼里面的類全部都修改一遍類名。并且在給類文件重命名的時(shí),需要注意前綴和后綴添加的位置,不要添加到和后面去了即可。

前言

近日由于種種原因,需要把代碼里面的類全部都修改一遍類名。

在網(wǎng)上找了一圈相關(guān)的開源庫(kù),沒有發(fā)現(xiàn)有合適滿意的,始終都存在一些問題,要么出現(xiàn)誤修改,要么把方法名或者屬性名也給修改了等等情況。

于是決定掏出生疏的Python來寫一個(gè)。

批量修改類名需要解決四個(gè)問題:

如何取得需要修改的類名?

如何修改文件中出現(xiàn)的類名并且不會(huì)出現(xiàn)誤改等情況?

如何修改文件名?

修改文件名后,如何同步修改project.pbxproj里面的文件名信息?

問題一、如何取得需要修改的類名?
想法A:
由于自己前不久寫了一個(gè)獲取target對(duì)應(yīng)的編譯以及資源文件的工具M(jìn)acPbxprojHelper,利用其來獲取到target對(duì)應(yīng)的類名寫入文件,然后用python來讀取文件獲取到需要修改的類名,實(shí)時(shí)上第一版我也是這么做的,但是不夠優(yōu)雅,明明一個(gè)腳本能解決的事,為什么需要那么多步操作呢?
想法B:
利用python直接遍歷文件夾獲取類名,沒錯(cuò)就決定是你了。
其實(shí)用python遍歷文件實(shí)現(xiàn)起來特別簡(jiǎn)單快捷。但是其中也有可能存在的問題,例如我們的項(xiàng)目中包含有部分資源文件,而資源文件的后綴名是不定的,但是實(shí)際我們只需要.m以及.mm結(jié)尾的文件前綴作為我們的類名,當(dāng)然其中包含有類目也需要過濾掉。并且考慮到我們具備一些特殊的需求,需要過濾某些文件甚至某些文件夾下的文件等等。我這邊的腳本都有考慮到

實(shí)現(xiàn)代碼如下:

def getClassNames(filepath):
    #讀取文件名入數(shù)組
    #過濾文件夾
    filterDirs = ["ThirdKit/","小說/"]
    #過濾文件
    filterFiles = []
    classNames = []
    #遍歷filepath下所有文件,包括子目錄
    for root, dirs, files in os.walk(filepath):
        for name in files:
            path = os.path.join(root, name)
            #過濾文件夾
            isFilterDir = 0
            for filterDir in filterDirs:
                if filterDir in path:
                    isFilterDir = 1
                    break
            if isFilterDir != 1:
                if ".m" in name:
                    splitNames = name.split(".m")
                    #只選擇.m和.mm結(jié)尾的文件
                    if splitNames[1] == "" or splitNames[1] == "m":
                        cn = splitNames[0]
                        #過濾文件
                        isFilterFile = 0
                        for ff in filterFiles:
                            if ff == cn:
                                isFilterFile = 1
                        if isFilterFile != 1:
                            #過濾類目
                            if cn.find("+") == -1:
                                print(cn)
                                classNames.append(cn)
    return classNames
問題二、如何修改文件中出現(xiàn)的類名并且不出現(xiàn)誤改的情況?

在我搜集到的開源的腳本中,有極大比例的一部分是直接通過類名替換,其實(shí)這特別容易出現(xiàn)誤改。比如我有一個(gè)類名為ABC,一個(gè)類名為AB,那么ABC就可能出現(xiàn)被修改兩次的情況。所以我這邊就采用笨辦法,先敲定類名出現(xiàn)的場(chǎng)景,根據(jù)其場(chǎng)景設(shè)定規(guī)則,只有出現(xiàn)類名出現(xiàn)在這些規(guī)則中時(shí),才去替換,這樣就可以保證100%的正確率。(這也是大坑,因?yàn)椴煌某绦騿T書寫習(xí)慣的問題,導(dǎo)致規(guī)則的定義實(shí)際極度繁瑣,而且會(huì)出現(xiàn)部分遺漏,每一次遺漏后,我都需要添加規(guī)則再重跑來驗(yàn)證··)

下面就是這個(gè)腳本最大的貢獻(xiàn)·· 自認(rèn)為基本涵蓋完了類名的出現(xiàn)場(chǎng)景(如果有沒有涵蓋的,請(qǐng)記得一定聯(lián)系我!!),一共37種規(guī)則,運(yùn)用這37種規(guī)則,做到了一次腳本,既完美修改,無需在動(dòng)代碼就可以直接運(yùn)行并且不會(huì)有閃退問題··
#一開始構(gòu)思了 14個(gè) 后來....
    rule_1 = """ + cn + "." #引用修改
    rule_2 = """ + cn + """ #類名被直接使用
    rule_3 = ":" + cn + " " #繼承 后續(xù)有空格
    rule_4 = ":" + cn + "
" #類名后面是換行
    rule_5 = " " + cn + "<"
    rule_6 = " " + cn + "
" #類名后面是換行
    rule_7 = " " + cn + " "
    rule_8 = " " + cn + "("
    rule_9 = "[" + cn + " "
    rule_10 = "[" + cn + "*"
    rule_11 = "(" + cn + "*"
    rule_12 = ")" + cn + "*"
    rule_13 = " " + cn + "*"
    rule_14 = " " + cn + "
"
    rule_15 = "(" + cn + " "
    rule_16 = " " + cn + ";"
    rule_17 = "," + cn + " "
    rule_18 = "," + cn + "*"
    rule_19 = ")" + cn + " " 
    rule_20 = "," + cn + ";"
    rule_21 = " " + cn + ","
    rule_22 = "<" + cn + "*" #被當(dāng)做協(xié)議 遵守類
    rule_23 = "<" + cn + " "
    rule_24 = "," + cn + ","
    rule_25 = " " + cn + ":"
    rule_26 = ":" + cn + "http://" #后面跟注釋的、、我TM。。
    rule_27 = " " + cn + "http://" 
    rule_28 = " " + cn + "{" #后面跟大括號(hào)的··
    rule_29 = ")" + cn + "<" #為什么遵守協(xié)議 也用了 實(shí)際類名 沒有用ID
    rule_30 = "(" + cn + "." #為什么類要使用.語(yǔ)法
    rule_31 = " " + cn + "."  #類名調(diào)用.語(yǔ)法
    rule_32 = "!" + cn + "."  
    rule_33 = ":" + cn + "."  #類名調(diào)用點(diǎn)語(yǔ)法 被當(dāng)做參數(shù)傳入
    rule_34 = "[" + cn + "
" #類名被換行
    rule_35 = ":" + cn + "<" #繼承類名后面 直接接入?yún)f(xié)議 默認(rèn)實(shí)際是不存在這個(gè)問題的
    rule_36 = """ + cn + "_" #類取名有下劃線以及數(shù)字 以及通過工廠用數(shù)字來創(chuàng)建的情況
    rule_37 = """ + cn + "%" #類取名有數(shù)字 以及通過工廠用數(shù)字來創(chuàng)建的情況
問題三、如何修改文件名?

這個(gè)問題其實(shí)很好解決,利用python的os庫(kù)就可以直接rename,只是需要拼接全路徑。并且在給類文件重命名的時(shí),需要注意前綴和后綴添加的位置,不要添加到.h和.m后面去了即可。

問題四、如何同步修改project.pbxproj里面的文件信息?

這里又和第二個(gè)問題一樣需要定義一定規(guī)則,才能確保不會(huì)出現(xiàn)誤替換,但是這個(gè)規(guī)則和上面比起來簡(jiǎn)直是小巫見大巫。規(guī)則如下:

def pbRule(cn):
    rule_1 = "=" + cn + "."
    rule_2 = " " + cn + "."
    rule_3 = "/" + cn + "."
    rule_4 = """ + cn + "."
以上,問題都解決了。
使用方式
----------腳本說明----------
腳本用于批量修改類名
腳本可傳入四個(gè)參數(shù)
1、待處理的文件路徑. example-->"./KanManHua"
2、待修改的pbxproj文件地址 example--        >"./KanManHua.xcodeproj/project.pbxproj"
3、類名前綴 example-->"MHT_"
4、類名后綴 example-->"_MHT"

其中前三個(gè)參數(shù)為必傳參數(shù) 劃重點(diǎn),要考
----------請(qǐng)開心使用---------
另腳本支持 -h --help 操作

當(dāng)參數(shù)錯(cuò)誤時(shí),也有對(duì)應(yīng)提示以及上述幫助信息

正常使用

示例:

python changeClassName.py ./KanManHua ./KanManHua.xcodeproj/project.pbxproj MHT_ _MHT
helpinfo獲取

示例:

python changeClassName.py
python changeClassName.py -h
python changeClassName.py --help
腳本地址 后記

由于我司還有需求修改指定 target的類名,實(shí)際也有一套可以僅僅只修改target類名的方法,但是由于使用要復(fù)雜一點(diǎn),首先要提取target對(duì)應(yīng)的編譯類,再使用腳本來修改,修改使用到我之前發(fā)布的一個(gè)工具類MacPbxprojHelper,如有需要的話請(qǐng)和我聯(lián)系。
聯(lián)系方式:357863248@qq.com

MacPbxprojHelper介紹鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42859.html

相關(guān)文章

  • Redis開發(fā)學(xué)習(xí)

    摘要:語(yǔ)法命令基本語(yǔ)法實(shí)例數(shù)據(jù)類型支持五種數(shù)據(jù)類型字符串,哈希,列表,集合及有序集合。資源修改文件增加如下內(nèi)容如果在集成環(huán)境的目錄下安裝完成后重啟或。 Redis 簡(jiǎn)介 Redis 是完全開源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn): Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的...

    ccj659 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<