当前位置: 首页 > 知识库问答 >
问题:

正在分析成绩单。将srt文件转换为可读文本

张姚石
2023-03-14

我有一个视频记录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'

Lorem ipsum dolor sit amet concetetur,adipising elit。要有尊严,就必须有足够的劳动力,才能胜任工作。雷,脸儿!

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

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行的函数可能会这样做

有没有人用巨蟒的动作来帮助我克服这个问题?

共有3个答案

赵永逸
2023-03-14

感谢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()
柳涵意
2023-03-14

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

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!
年凯康
2023-03-14

我只会使用像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!
 类似资料:
  • 我正在编写一个程序,读取文本文件,并显示第一个学生的姓名、年级和全班平均成绩。对于上面给出的文件,结果如下:类中的第一个是Ahmad Hamwi has 16.00,类的平均值是12.25这是我试图读取的W文本文件 这就是我一直犯的错误 我已经试了几个小时了。我知道错误在第37行。这可能与类型有关。我尝试了int和浮动,但一样。

  • 有没有办法将文件对象转换为多部分文件?以便我可以将该对象发送到接受接口对象的方法?

  • 我用node.js生成一个utf-8编码的csv,然后在windows上双击打开它。Excel会启动,但某些特殊字符(如`、`、ü、ä、ö、ü...)无法正确显示。我想这是由于错误的编码。我保存了一个用Excel创建的新csv。我看到编码是Windows-1252。

  • 问题内容: 我公司已经开发了一个Web应用程序(J2EE环境/ Tomcat服务器),并希望将其作为产品出售。客户可以将此产品用作基本版或高级版。在高级版中,客户具有一些额外的功能(可能是一些额外的链接)。这种区别是基于串行密钥进行的。 讨论上述问题时,我只是一个听众。 是否可以解决上述问题?我们如何将War文件转换为exe文件并嵌入逻辑以区分高级版本或基本版本。 问题答案: 我们如何将War文件

  • 我能得到php mime电子邮件解析器/解码器的帮助吗https://code.google.com/p/php-mime-mail-parser/不涉及任何安装。我甚至试过phpclasses的Zend和decoder。org,但没有帮助。我找不到如何将输入输入程序并从中获取输出,因为没有这方面的教程 我的目标:我需要将mime邮件从输入流转换为可读文本 请帮帮忙

  • 问题内容: 谁能告诉我将多部分文件(org.springframework.web.multipart.MultipartFile)转换为File(java.io.File)的最佳方法是什么? 在我的春季MVC Web项目中,我正在以Multipart文件的形式上传文件。我必须将其转换为File(io),因此我可以将此图像存储服务 称为Cloudinary 。它们仅采用(File)类型。 我进行了