• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Hugu

script pa modificar formataçao d texto em *.txt files (para legendagens)

15 mensagens neste tópico

Boas!..

Precisava de ajuda na feitura dum programa em python. Bem, em python porque estou a tentar aprender algo disto..   :)

O que queria fazer era tipo um conversor de formato de legendas, ou seja, tenho um txt com o formato seguinte:

HH:MM:SS  Texto1

HH:MM:SS  Texto2

(2 espaços entre o tempo e legenda)

e queria criar ou modificar este ficheiro mas com um formato do género dos *.srt's, tipo:

1

HH:MM:SS,000 --> HH:MM:SS+3segundos,000

Texto1

2

HH:MM:SS,000 --> HH:MM:SS+3segundos,000

Texto2

Alguma ajuda ou dicas?..

Obrigado!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu fazia da seguinte maneira:

Para cada linha:

1) Primeiro fazia um split a cada linha de maniera a ficar com duas strings, uma com o tempo e outra com o texto;

2) Depois pegava no tempo e passava para timespan;

3) Somava os 3 segundos;

4) Convertia novamente o tempo para H,M,S;

5) E depois é só montar a string e imprimir no ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguma script ja feita ou que possa usá-la com algumas modificaçoes?..  é que ainda estou mto leigo em python..  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres aprender python?

Se sim eu dou-te uns links para aprenderes, se não eu faço-te o programa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres aprender python?

Se sim eu dou-te uns links para aprenderes, se não eu faço-te o programa.

Sim tb quero aprender python..mas n queria levar um mês a fazer esta script.. :)

Eu ja tenho uma boa colecçao de pdf's, mas precisava de anos para lê-los.. tenho passado os olhos nos exemplos que aparecem, para poder aprender e a entender melhor co sao as coisas... depois em coisas mais especificas ou pontuais é que leio a sério os capitulos.. ou entao qdo quero fazer alguma coisinha, sondo a ver se ha qq coisa, para depois alterar à minha maneira.. Mas como o que estou a pedir deve ser caca para mtos de voces é que pedi o favorzinho :)

E sim, pode deixar os links que tem para dar.. os tutoriais nunca sao demais!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

def incr(time):
    time[2] += 3
    if time[2] >= 60:
        time[2] -= 60
        time[1] += 1
    if time[1] >= 60:
        time[1] -= 60
        time[0] += 1
    return time

open('destino.srt', 'w').write('\n'.join(['\n'.join([','.join([':'.join(map(lambda x: ('0'+str(x))[-2:], incr(map(int, line.split(" "*2)[0].split(":"))))),'000']), line.split(" "*2)[1], '']) for line in open('origem.txt', 'r').readlines() if line.strip() != '']))

Não teste a escrita e a leitura, aqui ficam os testes que fiz:

>>> print '\n'.join(['\n'.join([','.join([':'.join(map(lambda x: ('0'+str(x))[-2:], incr(map(int, line.split(" "*2)[0].split(":"))))),'000']), line.split(" "*2)[1], '']) for line in "11:11:11  asdfasdf\n12:12:12  asdfasdf\n59:59:59  asdfasdfasfd".split("\n")])
11:11:14,000
asdfasdf

12:12:15,000
asdfasdf

60:00:02,000
asdfasdfasfd

>>> 

Só quero ver se arranjo alguma ideia para evitar aquele def do incr... :biggrin:

EDIT: Já agora, não tinha posto logo uma protecção para o caso do ficheiro acabar com um \n, mas já alterei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

>>> print '\n'.join(['\n'.join([str(index), line.split(" "*2)[0]+',000 --> '+','.join([':'.join(map(lambda x: ('0'+str(x))[-2:], incr(map(int, line.split(" "*2)[0].split(":"))))),'000']), line.split(" "*2)[1], '']) for (line,index) in zip("11:11:11  asdfasdf\n12:12:12  asdfasdf\n59:59:59  asdfasdfasfd".split("\n"), range(1,len("11:11:11  asdfasdf\n12:12:12  asdfasdf\n59:59:59  asdfasdfasfd".split("\n"))+1))])
1
11:11:11,000 --> 11:11:14,000
asdfasdf

2
12:12:12,000 --> 12:12:15,000
asdfasdf

3
59:59:59,000 --> 60:00:02,000
asdfasdfasfd

Não tinhas posto o nº da legenda nem o tempo inicial.

def incr(time):
    time[2] += 3
    if time[2] >= 60:
        time[2] -= 60
        time[1] += 1
    if time[1] >= 60:
        time[1] -= 60
        time[0] += 1
    return time

open('destino.srt', 'w').write('\n'.join(['\n'.join([str(index), line.split(" "*2)[0]+',000 --> '+','.join([':'.join(map(lambda x: ('0'+str(x))[-2:], incr(map(int, line.split(" "*2)[0].split(":"))))),'000']), line.split(" "*2)[1], '']) for (line,index) in zip(open('origem.txt', 'r').readlines(), range(1,len(open('origem.txt', 'r').readlines())+1)) if line.strip() != '']))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não dá para simplificar um bocado esse código? É que há pessoal que não está interessado em aprender, mas há outros que estão, tal como eu, e ver esse código seria interessante.

Se alguém puder "desencriptar" isso, agradecia  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É que há pessoal que não está interessado em aprender, mas há outros que estão, tal como eu, e ver esse código seria interessante.

Ei boca foleira!  :mad:

Estou sim interessado em aprender! mas tb tenho mtas ideias e vontade de querer e ter logo as coisas..  eu ate costumo pedir que o ppl coloque comentarios nas linhas de codigo mais complicadas de perceber para saber o que faz e co fazer..

Obrigado pessoal, vou experimentar as scripts e personalizar à minha maneira.. dpx reporto

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ei boca foleira!  :mad:

Estou sim interessado em aprender! mas tb tenho mtas ideias e vontade de querer e ter logo as coisas..  eu ate costumo pedir que o ppl coloque comentarios nas linhas de codigo mais complicadas de perceber para saber o que faz e co fazer..

Obrigado pessoal, vou experimentar as scripts e personalizar à minha maneira.. dpx reporto

Cumps

Hugu, ele não estava a falar de ti! :P

Ele refere-se a muitos outros e não referiu ninguém... :) Vamos ter calma!

Eu partilho da opinião do softclean:

Eu codo Python e tenho de ler cuidadosamente o que escreveram numa linha só para mostrarem que são Python L33ts, porque sabem usar Programação Funcional e todos os métodos de Python. Não é esse o objectivo neste caso, porque o tópico está na secção de "Dúvidas e Ajudas" e não "Python Showoff"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu partilho da opinião do softclean:

ei boca foleira!.. 2! :)

Estou calmo..eu sou calmo por natureza.. :) só n gosto de bocas foleiras e de gente desagradável (n estou a particularizar ninguem!)

Eu codo Python e tenho de ler cuidadosamente o que escreveram numa linha só para mostrarem que são Python L33ts, porque sabem usar Programação Funcional e todos os métodos de Python. Não é esse o objectivo neste caso, porque o tópico está na secção de "Dúvidas e Ajudas" e não "Python Showoff"

python L33ts ??.. n sei o que isso significa, mas tb achei estranho uma linha de código tão extensa.. n deve ser só por isso k é dificil de entende-la, porque n se consegue vê-la tda duma so vez,?.. mas à conta destas mega extensoes, tenho uma outra dúvida:

- Já n é a primeira vez que me deparo com linhas extensas de código e na altura de fazer copy past, o código fica truncado e depois dá barraca.. eu tenho resolvido o problema em voltar a juntar o codigo todo na mm linha/sequencia, mas é preciso fazer uma ginástica louca.. mas deve haver maneira melhor, n?!

Existe maneira de resolver estes problemas de "truncagem"?

Obrigado + 1a x

p.s.:Ainda n corri a script, tou a ter problemas com o nanorc..  :wallbash:

EDIT:

já percebi a cena do L33t! :P leet..1337.. :P  já n preciso de ajuda para esta explicaçao! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hugu, não foi com intenção, apesar de ter lido agora o meu post, e perceber as tuas conclusões.

Referia-me à frase

Se sim eu dou-te uns links para aprenderes, se não eu faço-te o programa.

e como deram a solução de modo mais simples possível, sem grandes explicações, fiquei sem perceber o que faz o código. Não quis referir ninguém, como o Tharis disse. De qualquer modo, desculpa se percebeste o meu post de outra maneira  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ei boca foleira!.. 2! :P

Eu partilho da opinião do softclean quanto ao facto da simplicidade do código para alguém que está a aprender... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu codo Python e tenho de ler cuidadosamente o que escreveram numa linha só para mostrarem que são Python L33ts, porque sabem usar Programação Funcional e todos os métodos de Python. Não é esse o objectivo neste caso, porque o tópico está na secção de "Dúvidas e Ajudas" e não "Python Showoff"

Não é Python showoff, é Python practise. Eu demorei quase 2 horas a chegar àquela linha de código, e em 10mins tinha feito um código mais "normal", não o fiz porque queria brincar com o Python e desenvolver o meu raciocínio no paradigma funcional. Mas vou pôr aqui o equivalente em código mais "normal" já com as correcções apontadas pelo fnds:

def incr(time):
    time[2] += 3
    if time[2] >= 60:
        time[2] -= 60
        time[1] += 1
    if time[1] >= 60:
        time[1] -= 60
        time[0] += 1
    return time

out = open('destino.srt', 'w')
input = open('origem.txt', 'r').readlines()
i = 0

for line in input:
if line.strip() == '': continue
i += 1
legenda = line.split(' '*2)
time = map(int, legenda[0].split(':'))
incr(time)
out.write("%i\n%s,000 --> %s,000\n%s\n\n" % (i, legenda[0], ':'.join(map(lambda x: ('0'+str(x))[-2:], time)), legenda[1]
out.close()

Não testei o código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lembrem-se que quando alguém pede ajuda, é sempre bom porem as coisas de forma a que se entenda, e depois, se quiserem "practicar paradigmas", podem sempre por uma notinha do fim do post a dizer que há outras formas de se fazer o mesmo, tal como por exemplo...

Caso contrário, o Hugu e outros vão mesmo precisar de anos a ler PDFs para perceber uma única linha :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora