将成绩单 .srt 文件解析为可读文本

Jet*_*als 6 python srt

我有一个视频脚本 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!
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 python 读取并解析此文件,删除(或跳过)包含数字字符串的行(例如 SKIP '1' & '00:00:00,710 --> 00:00:03,220 '),然后格式化剩余的文本行,以便将它们连接起来并以可读的格式呈现。这是我尝试生成的输出的示例:

Lorem ipsum dolor sat amet consectetur,adipisicing elit。Dignissimos et quod Laboriosam iure magni expedita nisi, quis quaerat。雷姆,面对吧!

这是我到目前为止想出的代码:

def main():
    # Access folder in filesystem

    # After parsing content of file, move to next file

    # Declare variable empty list
    lineList = []

    # read file line by line
    file = open( "/Sample-SRT-File.srt", "r")
    lines = file.readlines()
    file.close()

    # look for patterns and parse

    # Remove blank lines from file
    lines = [i for i in lines if i[:-1]]

    # Discount first and second line of each segment using a match pattern
    for line in lines:
        line = line.strip()
        if isinstance(line[0], int) != False:

            # store all text into a list
            lineList.append(line)

    # for every item in the list that ends with '', '.', '?', or '!', append a space at end
    for line in lineList:
        line = line + ' '

    # Finish with list.join() to bring everything together
    text = ''.join(lineList)
    print(text)

main()
Run Code Online (Sandbox Code Playgroud)

我对 Python 的练习还不够,但现在我想知道有效且可靠地匹配该段的第一行和第二行以进行删除或跳过的唯一方法是否是使用正则表达式。否则,可以使用 itertools 库或某种跳过第 1 行和第 2 行以及任何空行的函数。

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

Ris*_*hav 10

我只会使用像pysrt这样的库来解析 srt 文件。这应该被证明是最稳健的。

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

for sub in subs:
    print(sub.text)
    print()
Run Code Online (Sandbox Code Playgroud)

输出:

Lorem ipsum dolor sit amet
consectetur, adipisicing elit.

Dignissimos et quod laboriosam
iure magni expedita

nisi, quis quaerat. Rem, facere!
Run Code Online (Sandbox Code Playgroud)


pgn*_*ngp 4

如果你想使用正则表达式过滤掉数字行和空行,你可以使用:

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()
Run Code Online (Sandbox Code Playgroud)

这将输出:

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Dignissimos et quod laboriosam iure magni expedita nisi, quis quaerat. Rem, facere!
Run Code Online (Sandbox Code Playgroud)