LINUX.ORG.RU

Функция работает при ручном вводе строки, не при чтении строк из файла

 , ,


0

1

Пишу конвертер для субтитров в srt из формата:

0:01
строка с репликой
...
10:05
строка с репликой

Ну и так далее. Проблема возникла на уровне преобразования изначальной строки с таймкодом в строку формата чч:мм:сс Я написал функцию:

def timecode(v):
        perviy=['0', '0', ':', '0', '0', ':', '0', '0']
        m1=list(v)
        m1.reverse()
        i=0
        for s in m1:
                perviy.pop(i)
                perviy.insert(i, s)
                i=i+1
        perviy.reverse()
        p=''
        for s in perviy:
                p=p+s

Прекрасно работает, если дальше в файле просто прописать:

print(timecode(0:05))

И с любыми аналогичными таймкодами такого формата. Но, если я применяю функцию для строк исходного файла:

n=0
n2=1
start=open('1.txt', 'r')
itog=open('1.srt', 'w')
for line in start:
        if n%2==0:
                itog.write(str(n2)+'\n')
                itog.write(timecode(line))
                n2=n2+1
        else:
                itog.write(line+'\n')
        n=n+1

Я получаю результат без одного символа: 00:0:05 Или вот такое, когда число минут двузначное: 0010:34 Голову уже сломал. Одна и то же функция, разница только в источнике строк. Что это такое и что можно сделать?

Рекомендую ещё почитать туториалы и книги по Python. Код плохой, видно, что даже туториал из поставки не прочитан (не дочитан).

def timecode(v):
        perviy = ['0', '0', ':', '0', '0', ':', '0', '0']
        # Если m1 - iterable, то не нужно преобразовывать его в list
        for i, s in enumerate(reversed(m1)):
                perviy.pop(i)
                perviy.insert(i, s)
               

        p = ''.join(reversed(perviy))
emorozov
()
Ответ на: комментарий от Nevermind
n2 = 1
with open('1.txt', 'r', newline='\n') as f_in, open('1.srt', 'w') as f_out:
    for n, line in enumerate(f_in):
        if n % 2 == 0:
            f_out.write(str(n2))
            f_out.write('\n')
            f_out.write(timecode(line))
            n2 += 1
        else:
            f_out.write(line)
        
        f_out.write('\n')

В примере newline=‘\n’, у вас может быть newline=‘\r\n’

qaqa ★★
()