為什麼要學這個?
如果透過指令或程式來做會更有效率的話,當然要使用指令來做。這篇文章主要在講文字檔裡的字串處理。
如果有想透過程式來合併文字檔的內容,可以試看看文章裡附的小程式。
前置作業
程式碼下載:
https://github.com/max32002/MaxFontScripts/blob/master/update_block_from_file.py
使用方法
update_block_from_file.py --first FIRST --second SECOND --begin BEGIN --resume RESUME
參數說明:
- –first 第一個檔案路徑,內容會被修改。
- –second 第二個檔案路徑,內容會被複製。
- –begin 第一個檔案跳脫不處理,第二個檔案開始複製的字串。
- –resume 第二個檔案跳脫不處理,並且第一個檔案接續輸出的字串。
改良前的前身:
https://github.com/max32002/MaxFontScripts/blob/master/update_lang_props.py
前身的前世:
https://github.com/max32002/MaxFontScripts/blob/master/copy_kerning_props.py
使用範例2號
遇到的問題是,想要同步 github 的多個 project 裡的 README.md 檔案裡的「相關網址」的區塊。
使用步驟:
Step 1:先修改出一個標準版,要讓其他專案做「共用」,修改後放到一個指定路徑。例如:~/Documents/sh/fix_font_readme_urls/README.md
Step 2:使用 find . 指令,列出有 README.md 的專案,或使用 ls 手動整理目錄的清單。
Step 3:使用 Step 2 的 List ,產生一個 python 檔案。例如:batch_sync_git_readme.py,檔案下載:
https://github.com/max32002/MaxFontScripts/blob/master/batch_sync_git_readme.py
這個程式的主程式,是去使用上面寫的 python, 主程式如下:
begin_string = "## 相關網頁"
resume_string = "https://max-everyday.com/about/#donate"
cmd = "~/Documents/sh/update_block_from_file.py --first \"%sREADME.md\"" % (item.replace("\"","\\""))
cmd += " --second \"%s\"" % (reuse_file.replace("\"","\\""))
cmd += " --begin \"%s\"" % (begin_string.replace("\"","\\""))
cmd += " --resume \"%s\"" % (resume_string.replace("\"","\\""))
print(cmd)
Step 4:執行 batch_sync_git_readme.py > run.sh 取得批次置換的指令在 run.sh 裡。
Step 5:先手動執行 run.sh 裡的某一行,並檢查置換結果是否如預期。如果結果是對的,就執行 run.sh 讓其他的資料夾都置換成「共用區塊」後的版本。
Step 6:執行批次git add/commit/push 指令。例如:batch_git_push.py,檔案下載:
https://github.com/max32002/MaxFontScripts/blob/master/batch_git_push.py
使用範例3號
情境:
有多個目錄 ex: /convert/, /convert_b2/ , /convert_xd/ 每個目錄下都有 TtfConfig.py, 每個 python 的檔案,在某一行以下,希望與 /convert/ 目錄下的 TtfConfig.py 相同。
使用方法:
~/Documents/sh/update_block_from_file.py --first convert_xd/TtfConfig.py --second convert/TtfConfig.py --begin " STYLE_INDEX = 5"
範例說明:
在 ” STYLE_INDEX = 5″ 這行文字以下,都會使用 second 的,會修改掉 first 指定的檔案。
Code Review 影片
程式架構優化 – 從其他檔案置換區塊內容
https://youtu.be/q2b1MYMpvUI
Max優化程式的方法是減少程式碼中寫死的常數,提升程式的彈性來增加使程式更容易重覆利用。