Добрый день! Пытаюсь написать скрипт для замены английского текста на русский перевод в субтитрах. Сначала был набросок, но потом с помощью волшебных пенделей и гугля, скрипт стал обретать черты. Итак. Есть файл субтитров srt:
1
00:00:12,753 –> 00:00:14,762
Agreed.
What's your point?
2
00:00:14,950 –> 00:00:18,140
There's no point, I just think
it's a good idea for a T-shirt.
Agreed.
Согласен.
What's your point?
А в чем смысл?
There's no point, I just think it's a good idea for a T-shirt.
Нет смысла, я всего лишь подумал, это хорошая идея для футболки.
1
00:00:12,753 –> 00:00:14,762
Согласе
смысл?
2
00:00:14,950 –> 00:00:18,140
Нет смысла, я всего лишь
подумал, это хорошая идея для
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import textwrap
# Создаем словать
en2rus = {}
# Открываем файл c переводами
with open("txt") as f:
# Если открывается
try:
# Обрабаываем в цикле
while True:
# Первая строка
FirstLine = next(f)
# Вторая строка
SecondLine = next(f)
# Заносим первую строку как ключ в словарь, а вторую строку как значение в
# словарь
# можно заодно любую длину сюда закинуть
en2rus[FirstLine] = SecondLine
# print(en2rus)
# Обрабатываем ошибку
except StopIteration:
pass # файл кончился
# Открываем файл c переводами
with open("srt") as b, open("srt-out", "w") as out:
# Если открывается
try:
# Обрабаываем в цикле
while True:
# Первая строка
FirstLine = next(b)
# Номер блока субтитров. Просто записываем
out.write(FirstLine)
# Вторая строка. Время субтитра. Просто записываем
SecondLine = next(b)
out.write(SecondLine)
# Третья строка
ThirdLine = next(b)
# Убираем знак завершения строки
SrtLine = ThirdLine.rstrip('\r\n')
# Перебираем все ключи словаря
for key in en2rus:
# Проверяем входит ли строка в ключи словаря - ключи словаря английский текст
if SrtLine in key:
# Определяем длину ключа
Lenkey = len(key)
# Определяем длину строки
LenSrtLine = len(SrtLine)
# Определяем длину переведенной строки, от которой нужно отрезать текст
y = textwrap.wrap(en2rus[key], width=LenSrtLine)
# Заменяем английский текст на перевод
ReplaceLine = ThirdLine.replace(SrtLine, y[0])
# Записываем замененный текст
out.write(ReplaceLine)
# Четвертая строка
FourthLine = next(b)
# Убираем знак завершения строки
SrtLine = FourthLine.rstrip('\r\n')
# Если длина строки = 2, тогда просто записываем
if len(SrtLine) == 2:
out.write(FourthLine)
else:
# Иначе:
# Перебираем все ключи словаря
for key in en2rus:
# Проверяем входит ли строка в ключи словаря - ключи словаря английский текст
if SrtLine in key:
# Определяем длину ключа
Lenkey = len(key)
# Определяем длину строки
LenFourthLine = len(SrtLine)
# Определяем длину переведенной строки, от которой нужно отрезать текст
y = textwrap.wrap(en2rus[key], width=LenSrtLine)
# Заменяем английский текст на перевод
ReplaceLine = FourthLine.replace(SrtLine, y[1])
# Записываем замененный текст
out.write(ReplaceLine)
# Обрабатываем ошибку
except StopIteration:
pass # файл кончился