Python一鍵處理iOS馬甲包的文件更改

一、修改文件前綴(JH-->Jneth)(若出現(xiàn)"http://"注釋報(bào)錯(cuò)更改為#)

import os
//需要修改的類名前綴 (需替換)
pre_str = 'JH'
// 新的類名前綴 (需替換)
pre_to_str = 'Jneth'
// 搜尋以下文件類型 (根據(jù)自己需求替換)
suf_set = ('.h', '.m', '.xib', '.storyboard', '.mm')
// 項(xiàng)目路徑   (找到自己的項(xiàng)目路徑)
project_path = '/Users/hyjt/Desktop/car/car'
// 項(xiàng)目project.pbxproj文件路徑 需要更新配置文件中的類名 (找到自己的項(xiàng)目project.pbxproj路徑)
pbxpro_path = '/Users/hyjt/Desktop/car/car.xcodeproj/project.pbxproj'

// 文件重命名函數(shù)度宦,返回新的文件名
def file_rename(file_path):
    root_path = os.path.split(file_path)[0]     // 文件目錄
    root_name = os.path.split(file_path)[1]     // 文件名包含擴(kuò)展名
    filename = os.path.splitext(root_name)[0];  // 文件名
    filetype = os.path.splitext(root_name)[1];  // 文件擴(kuò)展名

    new_path = os.path.join(root_path, filename.replace(pre_str, pre_to_str) + filetype)    // 拼接新路徑
    os.renames(file_path, new_path)             // 文件重命名
    return filename.replace(pre_str, pre_to_str)

// 定義一個(gè)字典 key=舊類名 value=新類名
needModifyDic = {}

// 遍歷文件踢匣,符合規(guī)則的進(jìn)行重命名
for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        if file_name.startswith((pre_str,)) and file_name.endswith(suf_set):
            old_name = os.path.splitext(file_name)[0]
            new_name = file_rename(os.path.join(root, file_name))
            needModifyDic[old_name] = new_name

// 遍歷文件,在文件中更換新類名的引用
print(needModifyDic)
for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        if file_name.endswith(suf_set):
            print('-----fileName-------' + file_name)
            with open(os.path.join(root, file_name), 'r+') as f:
                print('========fileName========' + file_name)
                s0 = f.read()
                f.close()
                for key in needModifyDic:
                    if key in s0:
                        with open(os.path.join(root, file_name), 'r+') as f4:
                            s1 = f4.read().replace(key, needModifyDic[key])
                            print(key + ' ------> ' + needModifyDic[key])
                            f4.seek(0)
                            f4.write(s1)
                            f4.truncate()
                            f4.close()
// 替換配置文件中的類名
for key in needModifyDic:
    with open(pbxpro_path, 'r+') as f:
        s0 = f.read()
        f.close()
        if key in s0:
            with open(pbxpro_path, 'r+') as f2:
                s = f2.read().replace(key, needModifyDic[key])
                f2.seek(0)
                f2.write(s)
                f2.truncate()
                f2.close()

二戈抄、修改文件后綴(ViewModel-->VM)

import os

// 需要修改的類名前綴 (需替換)
end_str = 'ViewModel'
// 不需要修改的類名后綴 (需替換)
not_end_str = []
// 新的類名后綴 (需替換)
end_to_str = 'VM'



// 搜尋以下文件類型 (根據(jù)自己需求替換)
suf_set = ('.h', '.m', '.xib', '.storyboard', '.mm')
// 項(xiàng)目路徑   (找到自己的項(xiàng)目路徑)
project_path = '/Users/hyjt/Desktop/car/car'
// 項(xiàng)目project.pbxproj文件路徑 需要更新配置文件中的類名 (找到自己的項(xiàng)目project.pbxproj路徑)
pbxpro_path = '/Users/hyjt/Desktop/car/car.xcodeproj/project.pbxproj'

// 文件重命名函數(shù)离唬,返回新的文件名
def file_rename(file_path):
    root_path = os.path.split(file_path)[0]     // 文件目錄
    root_name = os.path.split(file_path)[1]     // 文件名包含擴(kuò)展名
    filename = os.path.splitext(root_name)[0];  // 文件名
    filetype = os.path.splitext(root_name)[1];  // 文件擴(kuò)展名

    new_path = os.path.join(root_path, filename.replace(end_str, end_to_str) + filetype)    // 拼接新路徑
    // print(new_path)
    os.renames(file_path, new_path)             // 文件重命名
    return filename.replace(end_str, end_to_str)
def end_check(name):
    for str in not_end_str:
        if name.find(str) != -1 or name == end_str:
            return True
    return False
// 定義一個(gè)字典 key=舊類名 value=新類名
needModifyDic = {}

// 遍歷文件,符合規(guī)則的進(jìn)行重命名
for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        fileName = os.path.splitext(file_name)[0];  // 文件名
        if fileName.endswith(end_str) and file_name.endswith(suf_set) and end_check(fileName)==False:
            
            // print(file_name)
            old_name = os.path.splitext(file_name)[0]
            new_name = file_rename(os.path.join(root, file_name))
            needModifyDic[old_name] = new_name

// 遍歷文件划鸽,在文件中更換新類名的引用
print(needModifyDic)
for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        if file_name.endswith(suf_set):
            print('-----fileName-------' + file_name)
            with open(os.path.join(root, file_name), 'r+') as f:
                print('========fileName========' + file_name)
                s0 = f.read()
                f.close()
                for key in needModifyDic:
                    if key in s0:
                        with open(os.path.join(root, file_name), 'r+') as f4:
                            s1 = f4.read().replace(key, needModifyDic[key])
                            print(key + ' ------> ' + needModifyDic[key])
                            f4.seek(0)
                            f4.write(s1)
                            f4.truncate()
                            f4.close()
// 替換配置文件中的類名
for key in needModifyDic:
    with open(pbxpro_path, 'r+') as f:
        s0 = f.read()
        f.close()
        if key in s0:
            with open(pbxpro_path, 'r+') as f2:
                s = f2.read().replace(key, needModifyDic[key])
                f2.seek(0)
                f2.write(s)
                f2.truncate()
                f2.close()

三输莺、修改資源文件MD5值戚哎,不改變圖片(jpg,png)


import hashlib
import os
// 獲取MD5
def GetFileMd5(filename):
    if not os.path.isfile(filename):
        return
    myhash = hashlib.md5()
    f = open(filename,'rb')
    while True:
        b = f.read(8096)
        if not b :
            break
        myhash.update(b)
    f.close()
    return myhash.hexdigest()
// 給文件添加末尾,改變md5
def fileAppend(filename):
    myfile = open(filename,'a')
    // 添加一個(gè)自定義內(nèi)容嫂用,并不影響文件
    myfile.write("jneth")
    myfile.close
// 設(shè)置以這些結(jié)尾的
suf_set = ('.png', '.jpg')
project_path = '/Users/hyjt/Desktop/****/qiyuan-ios/car/car/'
// 遍歷文件型凳,符合規(guī)則的進(jìn)行重命名
// 項(xiàng)目路徑   (找到自己的項(xiàng)目路徑)


for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        if file_name.endswith(suf_set):
            short_name = os.path.splitext(file_name)[0]
            realpath = os.path.join(root, file_name)
            print(short_name + ' ==> ' + realpath)
            oldMd5 = GetFileMd5(realpath)
            fileAppend(realpath)
            newMd5 = GetFileMd5(realpath)
            print(oldMd5 + '-->' + newMd5)


*修改前綴那個(gè)思路忘記那里看到的了,所以沒辦法標(biāo)注參考來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嘱函,一起剝皮案震驚了整個(gè)濱河市甘畅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌往弓,老刑警劉巖疏唾,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異函似,居然都是意外死亡槐脏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門撇寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顿天,“玉大人,你說我怎么就攤上這事蔑担∨品希” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵啤握,是天一觀的道長(zhǎng)畔规。 經(jīng)常有香客問我,道長(zhǎng)恨统,這世上最難降的妖魔是什么叁扫? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮畜埋,結(jié)果婚禮上莫绣,老公的妹妹穿的比我還像新娘。我一直安慰自己悠鞍,他們只是感情好对室,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咖祭,像睡著了一般掩宜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上么翰,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天牺汤,我揣著相機(jī)與錄音,去河邊找鬼浩嫌。 笑死檐迟,一個(gè)胖子當(dāng)著我的面吹牛补胚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播追迟,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溶其,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了敦间?” 一聲冷哼從身側(cè)響起瓶逃,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廓块,沒想到半個(gè)月后金闽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剿骨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埠褪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浓利。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钞速,靈堂內(nèi)的尸體忽然破棺而出贷掖,到底是詐尸還是另有隱情,我是刑警寧澤渴语,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布苹威,位于F島的核電站,受9級(jí)特大地震影響驾凶,放射性物質(zhì)發(fā)生泄漏牙甫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一调违、第九天 我趴在偏房一處隱蔽的房頂上張望窟哺。 院中可真熱鬧,春花似錦技肩、人聲如沸且轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旋奢。三九已至,卻和暖如春然痊,著一層夾襖步出監(jiān)牢的瞬間至朗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工剧浸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爽丹,地道東北人筑煮。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粤蝎,于是被迫代替她去往敵國(guó)和親真仲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,103評(píng)論 1 32
  • 前言 自2016年8月至2017年10月初澎,今日頭條iOS端已經(jīng)進(jìn)行了3輪安裝包大小優(yōu)化秸应。 2016.08-2016...
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)碑宴。 注意:講述HT...
    kismetajun閱讀 27,486評(píng)論 1 45
  • 天明软啼,我的一雙兒女就整整十六歲了。 今天延柠,谷雨祸挪。二零零一年的今天,農(nóng)歷三月二十四贞间,晚春的風(fēng)緩緩吹過田野贿条,正揚(yáng)花的小...
    八里山人程遠(yuǎn)河閱讀 1,141評(píng)論 44 50
  • 我曾幻想過,有朝一日增热,當(dāng)生命的火焰被耗盡時(shí)整以,那么我又會(huì)變成什么模樣。 其實(shí)這個(gè)問題是十分有意思的峻仇,這讓我想到葉...
    九點(diǎn)九分聽見回想閱讀 130評(píng)論 0 0