1

我有一个视频脚本 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:00,710 --> 00:00:03,220 ') 然后对剩余的文本行进行格式化,以便将它们连接起来并以可读的格式呈现。这是我尝试生成的输出示例:

Lorem ipsum dolor 坐在 amet consectetur,adipisicing 精英。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()

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

有没有人用 Python 移动来帮助我克服这个问题?

4

4 回答 4

3

我只会使用像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!
于 2018-06-28T00:23:15.007 回答
3

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

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!
于 2018-06-28T00:45:21.657 回答
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()
于 2021-08-05T15:55:52.317 回答
0

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

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

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

于 2018-06-28T01:27:12.373 回答