最近寫了兩個比較簡單的python程序,原有都是由於看公開課感覺比較費勁,一個是下載的視頻無用的名字太長,另一個就是下載的vtt字幕播放器不識別,寫了一個vtt轉換成str字幕格式的文件
vtt to str比較簡單:
大概就是打開一個vtt文件,把開頭的webvtt刪掉,把所有的"."替換成",",把后綴名改成srt。參考下面兩個網頁
http://mooc.guokr.com/post/615236/
http://blog.csdn.net/iracer/article/details/48765347
要是單純的吧vtt改成srt。播放時的確會顯示字幕,但是字幕會無視時間軸,一個勁的走,根本起不到字幕的作用。
要是一個個用記事本打開,重復的操作這些工作還是比較惡心。畢竟mooc一份時間比較短,總份數又比較多。
我的方法就是讀出文件后,用split('.'),把所有的內容分割起來,再 str1+ ',' + str2 迭代起來把所有的內容拼接起來,這樣完成了替換。
用str = listvtt[0][8:]的方式刪掉了WEBVTT\n\n 這8個字符。最后重新建立一個同樣名字的srt字幕文件
下面就是我的具體實現
#4到9行是把路徑中所有的vtt文件找出來
#os.listdir(path) 返回一個內容是path所有文件名的數組
1 #coding = utf-8 2 import os 3 path = r"E:\folders" 4 vttName = [] 5 6 for i in os.listdir(path): 7 name = i.split('.') 8 if name[-1] == 'vtt': 9 vttName.append(i) 10 11 for vttname in vttName: 12 vtt = open(path + "\\" + vttname) 13 filevtt = vtt.read() 14 vtt.close() 15 #print filevtt 16 listvtt = filevtt.split('.') 17 #print listvtt 18 #print listvtt[0][8:] 19 strvtt = listvtt[0][8:] 20 for i in range(1 , len(listvtt) ): 21 strvtt = strvtt + "," + listvtt[i] 22 23 #print strvtt 24 srtName = vttname.split('.') 25 srt = open(path + '\\' + srtName[0] + '.srt','w') 26 27 srt.write(strvtt) 28 srt.close() 29 30
#listvtt[0]是vtt文件的在第一個'.'好的所有內容,由於vtt的文件格式前面為WEBVTT\n\n 正好可以刪去 用了魔術數字 8
閑話不多說,其實主要的就是用到了python 的 os包中的 changename 以及python的文件讀寫。
changename 比較無腦,
文件讀寫就是把文件的內容讀出來——就是讀成一個str,修改這個str,並寫入到文件中。
程序很簡單,而且python不愧是思考問題最簡單易行的方法。
changname 非常簡陋:
1 path = 'E:\\folders' 2 for files in os.listdir(path): 3 print files 4 p = files.split('_') 5 print p 6 print p[-1] 7 oldname = path + '//' + files 8 newname = path + '//' + p[-1] 9 os.rename(oldname, newname) 10
這個就是根據文件名的特點,提取了最后一個也就是我想要的內容並更改名字,而且也是一次性的把文件夾里所有的文件名都改了,有點不太智能。但也夠用了 :P
而且這個程序我是直接在idle 中用的,比較簡單與原始