LINUX.ORG.RU

История изменений

Исправление proud_anon, (текущая версия) :

Какой страшный код у тебя.

except StopIteration:
        pass  # файл кончился
Вот это самое страшное место.

А что касается твоей проблемы, то, КМК, что ты написал, то ты и получил:

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)
Ты отрезаешь от русской строки LenSrtLine символов, где LenSrtLine = длина оригинальной английской строки. Например, строка «Agreed.» превращается в «Согласе».

В качестве исправления на скорую руку могу предложить следующее:

# Определяем длину переведенной строки, от которой нужно отрезать текст
replacement = re.match('^.{{0,{}}}\w*\W?'.format(LenSrtLine), en2rus[key])
# Заменяем английский текст на перевод
ReplaceLine = SrtLine.replace(SrtLine, replacement)

Кроме того, вот тут:

#В последнем else
y = textwrap.wrap(en2rus[key], width=LenSrtLine)
у тебя опечатка, надо было LenFourthLine.

Конечно, правильнее всего было изначально разбивать по словам, а не по символам.

Исходная версия proud_anon, :

Какой страшный код у тебя.

except StopIteration:
        pass  # файл кончился
Вот это самое страшное место.

А что касается твоей проблемы, то, КМК, что ты написал, то ты и получил:

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)
Ты отрезаешь от русской строки LenFourthLine символов, где LeSrtLine = длина оригинальной английской строки. Например, строка «Agreed.» превращается в «Согласе».

В качестве исправления на скорую руку могу предложить следующее:

# Определяем длину переведенной строки, от которой нужно отрезать текст
replacement = re.match('^.{{0,{}}}\w*\W?'.format(LenSrtLine), en2rus[key])
# Заменяем английский текст на перевод
ReplaceLine = SrtLine.replace(SrtLine, replacement)

Кроме того, вот тут:

#В последнем else
y = textwrap.wrap(en2rus[key], width=LenSrtLine)
у тебя опечатка, надо было LenFourthLine.

Конечно, правильнее всего было изначально разбивать по словам, а не по символам.