用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两种备份方法总结:mysqldump 和 xtrabackup
mysqldump工具基本使用 1. mysqldump [OPTIONS] database [tables…] 还原时库必须存在,不存在需要手动创建 --all-databases: 备份 ...
- [七月挑选]frp初使用
title: frp初使用 先starfatedier/frp,再开工. 什么是frp? frp is a fast reverse proxy to help you expose a local ...
- Oracle 赋予指定用户dba权限
指定用户赋权限 1.链接数据库地址,使用ssh登录 2.sudo -i 3.grant dba to 用户名;
- Linux系统性能测试工具(二)——内存压力测试工具memtester
本文介绍关于Linux系统(适用于centos/ubuntu等)的内存压力测试工具-memtester.内存性能测试工具包括: 内存带宽测试工具——mbw: 内存压力测试工具——memtester: ...
- MongoDB与python 交互
一.安装pymongo 注意 :当同时安装了python2和python3,为区分两者的pip,分别取名为pip2和pip3. 推荐:https://www.cnblogs.com/thunderLL ...
- 03python面向对象编程5
5.1 继承机制及其使用 继承是面向对象的三大特征之一,也是实现软件复用的重要手段.Python 的继承是多继承机制,即一个子类可以同时有多个直接父类. Python 子类继承父类的语法是在定义子类时 ...
- u-boot Kconfig结构解析
1 /u-boot-2019.07/Kconfig source "arch/Kconfig" 2 /u-boot-2019.07/arch/Kconfig -->有一个一 ...
- Java课程作业02
01. 一.设计思想: 第一种使用n!的公式直接计算,利用递归方法求n! 第二种使用递推的公式,利用递归返回求和. 二.程序流程图 三.源代码 import java.util.*;import ja ...
- 两个jquery编写插件实例
(1) 封装基于jq弹窗插件 相信码友们对于$.fn.extexd();$.extend()以及$.fn.custom和$.custom都有一定的了解:我阐述一下我自己对于$.fn.custom和 ...
- 5433. 【NOIP2017提高A组集训10.28】图
题目描述 Description 有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x ...