請幫我以下的問題:變化符合腳本(Python或bash)的
(1)我需要找到一個文件夾中的所有* .txt文件夾及其子 ( 2)在這些純文本文件中,有一行以「#GAP:6009,27」開頭。我想在所有文件中改變這個值,減少175。例如:之前:「#GAP:6009,27」,之後:「#GAP:5834,27」。
文本文件包含很多行,只有特定的行應該更改。例如:
[...]
#MedleyEndBeat:790
#BPM:335,53
#GAP:6009,27
#ENCODING:CP1252
[...]
我該如何做到這一點?
我的想法:
找到所有的txt文件,並運行Python腳本
find musicdir -name \*.txt -exec ./mypythonscript {} \;"
Python腳本包含像這樣(只是想法,語法是完全錯誤的,我知道,但我會看它後來):
filepath = open($1)
with open(filepath) as file:
for line in file:
if line[0:5] == "#GAP:" then
newvalue = calc(line[6:]-175) # extract substring (the GAP value till end of line)
newfile += "#GAP:" + newvalue
GAP_FOUND = 1
else
newfile += line
write(filepath) << newfile
if GAP_FOUND != 1 then
echo "ERROR: GAP LINE NOT FOUND IN"+filepath
那麼有沒有更好的方法來做到這一點?或者可以這樣做?我不是專業的編碼器,這就是爲什麼我的方法可能看起來不好:)
有很多方法可以做到這一點,但如果你已經知道python,那麼這看起來很好。就我個人而言,我會製作一個更改後的文件的副本,只有當你知道內容全部寫完,但可能比你需要的更偏執狂 – 2015-02-07 08:52:45
你走在正確的軌道上,但你絕對可以更優雅。你可以讓python腳本自己找到所有的文件。您可以使用多個上下文管理器一次打開多個文件,並且可以更有效地利用內存。 Gap_found應該只是一個布爾值。如果你想超級漂亮,那麼你可以使用線程或多處理來做得更快。 – 2015-02-07 09:09:00
謝謝大家!我學到了很多。很多不同的方法來解決這個問題=) – merlin 2015-02-07 16:34:20