使用Notepad++及Python脚本批量将老友记的srt字幕文件批量转换为json格式

从网上字幕库下载得到的字幕文件压缩包如下图所示:

 

 

然后使用7z解压到当前目录,得到的部分文件列表如下(一共有228个字幕文件):

 

 

打开其中一个文件查看格式如下:

 

 

字符编码是 ANSI 的,需要先批量转换为 UTF-8的格式,可参考: https://www.cnblogs.com/abc789/p/12148402.html

然后再使用如下Python脚本批量转换为json格式。 

 

 1 # -*- coding: UTF-8 -*-
 2 #coding=utf-8
 3 from os.path import abspath, dirname
 4 import re
 5 import sys
 6 import shutil
 7 import os
 8 def proSrtFile(path,srtFile,pathDest):
 9     result = list()
10     f = open(path + '\\' + srtFile,'r')
11     lines = f.readlines()
12     new_line=''
13     is_eng = 0 
14     is_chn = 0
15     chn = ''
16     eng = '' 
17     result.append('[')
18     for line in lines:
19         line = line.strip() 
20         line = line.lstrip() 
21         line = line.replace('...',' ')
22         line = line.replace('\"','\'')
23         line = line.replace('.','. ')
24         line = line.replace(',',', ')
25         line = line.replace('?','? ')
26         line = line.replace(':',': ')
27         line = line.replace(';','; ')
28         line = line.replace('!','! ')
29         line = line.replace('. . ','. ')
30         if '-->' in line:
31             continue
32         line = line.replace('-','')
33         if line == '':
34             # 如果中文或英文之一为空则不输出
35             if eng != '' and chn != '': 
36                 result.append('{"eng":"' + eng + '","chn":"' + chn + '"},')
37             is_eng = 0 
38             is_chn = 0 
39             eng = ''
40             chn = '' 
41             continue    
42         
43         # 如果这行是数字则写入上一行并重新开始:
44         if line.isdigit():
45             is_eng = 1 
46             is_chn = 0
47             eng = '' 
48             chn = '' 
49             continue
50         if is_eng == 1:
51             eng = line 
52             is_eng = 0 
53             is_chn = 1
54             continue
55         if is_chn == 1:
56             chn = line 
57             is_eng = 0 
58             is_chn = 0
59             continue
60  
61     f.close()
62     result.append(']')
63     open(pathDest + '\\' +  srtFile[0:14] +'.json','w').write('%s' % '\n'.join(result))
64     
65 pathSrc="D:\\data\\corona_projects\\LearnEnglishSentences_json\\data\\friends\\001\\" 
66 pathDest="D:\\data\\corona_projects\\LearnEnglishSentences_json\\eng"
67 indexList= list()
68 for root, dirs, files in os.walk(pathSrc):
69     for fn in files: 
70         if fn[-4:] == '.srt':
71             
72             print fn
73             indexList.append('{"title":"'+fn[0:14]+'","file":"' + fn[0:14] +'.json"},')
74             proSrtFile(root,fn,pathDest)
75 
76 open(pathDest + '\\' +  'x_temp_index.xml','w').write('%s' % '\n'.join(indexList))
77  
78 print '--------------------------------------------'
79 print pathDest 
80 print pathDest + '\\' +  'x_temp_index.xml'
81  

 

在运行之前,注意修改以上脚本的第 65 行,66行  pathSrc 存储了已经转码为UTF8的原始字幕文件的目录,pathDest存储了转换为json格式后输出的目录。

 

其中一个转换完毕的json文件格式如下图所示:

 

 

 

主要对源文件做了如下转换:英文用eng表示,中文用chn表示,每句中文,英文合并到了一行。并存储成了json格式。

posted @ 2020-01-04 13:33  我有目标  阅读(1761)  评论(0编辑  收藏  举报