用Python处理字幕文件
始
下了部老电影,找到了相关的中英文字幕,奇怪的是,英文字幕能正常现实,中文字幕却不可以,我一度以为是Linux下播放器编码的问题,但是怎么更改设置都无效,而我以前在看其他电影时,中文字幕是正常的。所以,怀疑是字幕文件的问题,打开中英文字幕文件对比:
- 英文
5
00:02:53,500 --> 00:02:54,700
Police. Hello?
6
00:03:03,800 --> 00:03:08,000
EVERYONE IS THE MOON
7
00:03:10,100 --> 00:03:13,700
I CAN'T HANG ON ANYMORE
- 中文
5
00:02:53,500 - - > 00:02:54,700
警察。喂?
6
00:03:03,800 - - > 00:03:08,000
每个人都是月亮
7
00:03:10,100 - - > 00:03:13,700
我不能坚持下去了
可以看出,中文字幕的格式有问题,所以我决定用Python的正则表达式修改一下。
代码
import re
with open('./Minazuki 1999.srt', encoding='utf-8') as file:
srt = file.read()
# 第一步多余换行
srt = srt.replace('\n\n', '\n')
# 需要在序号前面补上换行
srt = re.sub(r'\n(\d{1,3})\n', r'\n\n\1\n', srt)
# 修正其他字符错误
srt = srt.replace('- - ', '--')
with open('./Minazuki 1999_new.srt', 'w', encoding='utf-8') as file:
file.write(srt)
- 输出的字幕文件:
5
00:02:53,500 --> 00:02:54,700
警察。喂?
6
00:03:03,800 --> 00:03:08,000
每个人都是月亮
7
00:03:10,100 --> 00:03:13,700
我不能坚持下去了
已经可以正常显示了。
学到的知识点记录
参考了这篇博客, 正则表达式30分钟入门教程。
可是使用()
来对正则模式匹配的内容进行编号,在后续中用数字来\数字
使用对应的内容,如
srt = re.sub(r'\n(\d{1,3})\n', r'\n\n\1\n', srt)
其中,(\d{1,3})
表示的内容,在后面用\1
来访问,\0
表示整个正则表达式。除了编号,也可以命名,例如(?<Numers>\d{1,3})
,在后面可以用\k<Numbers>
来访问,不过该方法在我在Python中未成功使用,有待进一步调查。
用Python处理字幕文件的更多相关文章
- python基础之文件处理
读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...
- Python开发【第三篇】:Python基本之文件操作
Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和 file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...
- Python绘制PDF文件~超简单的小程序
Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- python批量进行文件修改操作
python批量修改文件扩展名 在网上下载了一些文件,因为某种原因,扩展名多了一个后缀'.xxx',手动修改的话因为文件太多,改起来费时费力,于是决定写个小脚本进行修改. 1.要点: import r ...
- 关于Python中的文件操作(转)
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
- Python基础、文件处理
一.概述 Python中操作文件是通过file对象来处理的,步骤: 指定文件的路径.操作的模式 对文件进行操作,读或写操作 关闭文件对象 f = open( '文件路径','访问模式') # 打开文件 ...
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- JWPlayer中字幕文件的配置
最近应项目要求研究JWPlayer,视研究进度可能会将解决的问题或者一些配置方法写在这里. jwplayer支持vtt和srt格式的字幕文件,在视频中可以选择加载多个字幕文件(常用于多语言字幕),并且 ...
随机推荐
- js常见的设计模式一
1.观察者模式 定义一些一对多的关系,将一系列的观察者对目标函数感兴趣,将自己添加进目标函数,当目标函数状态发生改变时,发送通知,以此通知附加在目标上的观察者 /* 目标 */ class subje ...
- CSS行内框(内联元素)
行内框在一行中水平布置.可以使用水平内边距.边框和外边距调整它们的间距.但是,垂直内边距.边框和外边距不影响行内框的高度.由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的 ...
- Houdini:也许是你未曾听过的最振奋人心的 CSS 进化
原文链接:Houdini: Maybe The Most Exciting Development In CSS You’ve Never Heard Of更多译文将陆续推出,欢迎点赞+收藏+关注我的 ...
- 八、LaTex中的表格
- delete释放空间时出错的原因
int *a=new int[10]; ...... delete []a; 后面“delete []a;”出现错误的情况大致有: 1 数组的首地址a被你有意无意更改了,如:a++之类的: 2 变量的 ...
- PAT Advanced 1019 General Palindromic Number (20 分)
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- postman(二):详解在Pre-request Script中如何执行请求
一.这里以Pre-request Script标签来介绍 postman提供了postman提供了一个"Send a request"代码段,他是已经封装好的发送请求的方法 一个& ...
- Django【第16篇】:Django之Form组件自定义验证规则
自定义验证规则以及中间件简单介绍 1.python2和python3中的区别 对于python2内置的字符串类型有str和unicode 比如:"abc"是字符串,u"你 ...
- 谷歌浏览器遇到js报错自动进行断点调试,如何关闭
转载于csdn 附地址 http://blog.csdn.net/microcosmv/article/details/60793882 留备用.
- 《SaltStack技术入门与实践》—— Event和Reactor系统
Event和Reactor系统 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Event是SaltStack里面的对每个事件的一个记录,它相比job ...