用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格式的字幕文件,在视频中可以选择加载多个字幕文件(常用于多语言字幕),并且 ...
随机推荐
- 从零开始学MySQL(四)
上节连接:https://www.cnblogs.com/RajXie/p/10880809.html 上节说到,在创建表的同时,需要给出列的定义.列的定义可展开如下: 列名 列的数据类型 列的一些其 ...
- nmblookup - 基于TCP/IP上的NetBIOS客户用于查询NetBIOS名字的程序
总览 SYNOPSIS nmblookup [-M] [-R] [-S] [-r] [-A] [-h] [-B <broadcast address>] [-U <unicast a ...
- 组件通信 $ref
(1)放在dom上表示获取当前dom元素, (2)放到组件上表示获取当前组件实例 (3)在v-for中获取的是集合 <!DOCTYPE html> <html lang=" ...
- IO流一
1 Java IO原理 I/O是input/output的缩写,IO技术是非常实用的技术,用于处理设备之间的数据传输.如读写文件,网络通讯等. Java程序中,对于数据的输入输出操作以“流Stream ...
- 连续处理函数reduce
>>> def operat(x,y): return x*y >>> print reduce(operat,(1,2,3,4,5,6,7,8,9,10))362 ...
- 阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性
近日,阿里云 Serverless 应用引擎(SAE)发布 v1.2.0版本,新版本实现了以下新功能/新特性: 一键启停开发测试环境:企业开发测试环境一般晚上不常用,长期保有应用实例,闲置浪费很高.使 ...
- POJ 2385 Apple Catching ( 经典DP )
题意 : 有两颗苹果树,在 1~T 的时间内会有两颗中的其中一颗落下一颗苹果,一头奶牛想要获取最多的苹果,但是它能够在树间转移的次数为 W 且奶牛一开始是在第一颗树下,请编程算出最多的奶牛获得的苹果数 ...
- HDU 4758 Walk Through Squares ( Trie图 && 状压DP && 数量限制类型 )
题意 : 给出一个 n 行.m 列的方格图,现从图左上角(0, 0) 到右下角的 (n, m)走出一个字符串(规定只能往下或者往右走),向右走代表' R ' 向下走则是代表 ' D ' 最后从左上角到 ...
- HDU 1298 T9 ( 字典树 )
题意 : 给你 w 个单词以及他们的频率,现在给出模拟 9 键打字的一串数字,要你在其模拟打字的过程中给出不同长度的提示词,出现的提示词应当是之前频率最高的,当然提示词不需要完整的,也可以是 w 个单 ...
- placeholder属性 样式修改(颜色,大小,位置)
input::-webkit-input-placeholder{ color:red; } /* WebKit, Blink, Edge */ input::-moz-placeholder{ co ...