将transcript.srt文件解析为可读文本

2024-06-28 20:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个视频记录SRT文件,其中有传统SRT格式的行。下面是一个例子:

1
00:00:00,710 --> 00:00:03,220
Lorem ipsum dolor sit amet
consectetur, adipisicing elit.

2
00:00:03,220 --> 00:00:05,970
Dignissimos et quod laboriosam
iure magni expedita

3
00:00:05,970 --> 00:00:09,130
nisi, quis quaerat. Rem, facere!

我尝试使用python读取并解析这个文件,删除(或跳过)包含数字字符串的行(例如,skip'1'&; '00:00:00710-->;00:00:03220'),然后设置其余文本行的格式,以便将它们连接起来并以可读格式显示。下面是我尝试生成的输出示例:

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Dignissimos et quod laboriosam iure magni expedita nisi, quis quaerat. Rem, facere!

以下是我目前为止想出的代码:

^{pr2}$

我对Python的实际操作已经不多见了,但现在我想知道,要有效可靠地匹配要删除或跳过的段的第一行和第二行,唯一的方法是使用正则表达式。否则,可以使用itertools库或某种类型的函数来跳过第1行和第2行以及任何空行。在

有人用Python来帮我克服这个问题吗?在


Tags: 文件格式etipsumsrtloremdoloramet
3条回答

我只需要使用pysrt这样的库来解析srt文件。这应该被证明是最有力的。在

import pysrt
subs = pysrt.open("foo.srt")

for sub in subs:
    print(sub.text)
    print()

输出:

^{pr2}$

如果您希望有一个特定的列表来查找,下面的代码可以解决您的问题,并给您指定一个项目列表的机会,即使它们包含不同的类型。在

with open ('foo.srt', 'r') as f:
   for line in f:
      if not line.startswith(('0', '1' , '2', '3')):
         print(line) 

虽然,这是一个循环,所以如果你担心你的程序的速度,我会用pysrt推荐上面的答案。在

如果要使用regex过滤掉数字行和空行,可以使用以下命令:

import re

def main():
    # read file line by line
    file = open( "sample.srt", "r")
    lines = file.readlines()
    file.close()

    text = ''
    for line in lines:
        if re.search('^[0-9]+$', line) is None and re.search('^[0-9]{2}:[0-9]{2}:[0-9]{2}', line) is None and re.search('^$', line) is None:
            text += ' ' + line.rstrip('\n')
        text = text.lstrip()
    print(text)

main()

这将输出:

^{pr2}$

相关问题 更多 >