為了學習英語,我把從網上下載下來的電影轉換成純MP3檔案,放到iTouch裡去了,這樣就可以直接練習聽力了,另外把下載下來的字幕也放進去,聽不懂的時候可以看,但有一個問題,網上傳下來的字幕格式都如下所示:
7<br />00:01:44,789 --> 00:01:51,019<br />片名:當幸福來敲門 / 追求幸福</p><p>8<br />00:02:49,469 --> 00:02:52,839<br />馬上來了<br />Should be here soon.</p><p>9<br />00:03:38,819 --> 00:03:41,189<br />- 我想我該列個表 - 幹嘛?<br />-I think I should make a list. -What do mean?</p><p>10<br />00:03:41,189 --> 00:03:43,789<br />- 想要的生日禮物? - 對呀<br />-For your birthday gifts? -Yeah.
如上,但存在兩個問題:1、每一句前面都帶有數字編號;2、帶有時間戳記;
我只想要裡面的中英文文本,數字編號和時間戳記都不需要。由於最近正在學習Python當然首先就想到了做個Python指令碼來把時間戳記和編號刪掉。實現很簡單,基本思路就是使用Regex匹配,把空行、純數字行及帶有“-->”的行刪掉,然後再先迴文本檔案。
完成後的代碼如下:
# -*- coding: utf-8 -*-</p><p># code=cp936<br />import string, re</p><p>title_txt = open('I://pursuit_for_happiness(ch).txt', 'r+')<br />try:<br /> full_txt = title_txt.readlines()<br /> regex1 = "/A/d*[/n]/Z"<br /> regex2 = "/d --> /d"<br /> #print full_txt<br /> new_txt = []<br /> for line in full_txt:<br /> #print line<br /> if re.match(regex1, line) or re.search(regex2, line):<br /> #print "match", line<br /> continue<br /> else:<br /> new_txt.append(line)</p><p> title_txt.seek(0)<br /> title_txt.truncate(0)<br /> #for line in full_txt:<br /> # title_txt.writelines(line)<br /> title_txt.writelines(new_txt)</p><p>finally:<br /> title_txt.close()</p><p>print "Over"
過程中遇到一個問題:
1、Python中沒辦法清空一個檔案,亂看了一通,發現使用truncate()方法,傳入參數為0時可以搞定。
2、開始的時候直接使用for遍曆list中的元素,匹配到就刪除,發現需要執行多次指令碼才能刪完,且有些還始終刪不掉,最後終於搞明白了:使用for i in list:時,如果一匹配到就刪除,則此時list中的元素會改變,進入迴圈的下一輪時不出問題才怪。造孽,花了近一個小時才把這個問題搞定了。於是重新定義了一個空鏈表new_txt,使用它來儲存我要的字幕,迴圈完成後把new_txt寫迴文件。大功告成!
爽,拷到我的iTouch裡,開始學習英語了!