用另一个文本文件中的内容替换文本文件中的每三行

时间:2019-08-31 04:27:13

标签: python python-3.x text-files readline

尝试用实际的字幕替换每三行。

背景:我正在借助Videosubfinder和ocr api从音乐视频和电影制作字幕。

emptySub.srt(由Videosubfinder自动创建)

1
00:00:10,076 --> 00:00:15,080
sub duration: 5,004

2
00:00:57,891 --> 00:01:01,694
sub duration: 3,803

subtitle.txt看起来像这样(使用ocr api并遍历图像,您无需查看代码)

I bought some eggs.
He bought some spam.

代码

with open("empty.srt", "a") as file:
    for line in file:
        # TODO

预期产量

1
00:00:10,076 --> 00:00:15,080
I bought some eggs.

2
00:00:57,891 --> 00:01:01,694
He bought some spam.

我被困住了。如何用我的字幕替换?也许我应该使用我不知道的正则表达式。

编辑:我终于自己解决了

2 个答案:

答案 0 :(得分:0)

您想要以下产品的某种变体

subtitleLines = open('subtitle.txt', 'r')

# Creates a list of lines
srtLines = open('srtfile.srt', 'r').readlines()

for (i, line) in enumerate(subtitleLines):
  srtLines[3*i + 2] = line

# emit srtLines

这对于KB到〜MBish范围内的文件将表现良好,但是如果文件很大,则您想提高srt file的速度要比副标题file快。您如何推进打开的文件?通过调用next()

# after reading in subtitle.txt into subtitleFile:
for line in subtitleFile:
  for i in range(2):
    # Your "next" line will have a newline, so suppress print()'s
    # default newline.
    print(srtFile.next(), end="")
  # advance without printing
  srtFile.next()
  print line

您将要捕获StopIteration并决定SRT文件“用尽”后该怎么做-这取决于您是否要验证。

但是请注意,在您的示例中,看起来好像从第3行开始的第4行是字幕行(srt块之间有空白行)。

答案 1 :(得分:0)

subList = []
with open("subtitle.txt", "r") as subFile:
    for subLine in subFile:
        subList.append(subLine.rstrip())

print(subList)

i = 0
with open("emptySub.srt", "r") as file:
    for line in file:
        if line.startswith('s'):
            line = line.replace(line, subList[i]+'\n')
            i = i + 1
        with open('newFile.srt','a') as resFile:
            resFile.write(line)