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

时间:2018-06-28 00:14:08

标签: 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!

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

  

Lorem ipsum dolor坐着,非常舒适。 Dignissimos et quod labouriosam 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()

我现在仍然没有使用Python的实践,但是现在我想知道是否有效和可靠地匹配要删除或跳过的段的第一行和第二行的唯一方法是使用正则表达式。否则,可以使用itertools库或某种会跳过第1行和第2行以及任何空白行的函数来实现。

任何人都可以使用Python来帮助我克服这一难题吗?

4 个答案:

答案 0 :(得分:2)

我只会使用pysrt之类的库来解析srt文件。那应该证明是最可靠的。

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

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

输出:

Lorem ipsum dolor sit amet
consectetur, adipisicing elit.

Dignissimos et quod laboriosam
iure magni expedita

nisi, quis quaerat. Rem, facere!

答案 1 :(得分:1)

如果要使用正则表达式过滤掉数字行和空行,可以使用以下方法:

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()

这将输出:

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

答案 2 :(得分:0)

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

query()

尽管这是一个循环,所以如果您担心程序的速度,我会用pysrt建议上面的答案。

答案 3 :(得分:0)

感谢 python 3,因为不需要额外的导入

text =" "
with open(file,'r') as f:
    for line in f:
        if  not line[0].isdigit():
            text+= " " + line.replace('\n','')
            text = text.lstrip()