Portál AbcLinuxu, 5. května 2024 08:59


Dotaz: Spojit dva řádky do jednoho.

17.4.2021 20:46 Arny
Spojit dva řádky do jednoho.
Přečteno: 862×
Odpovědět | Admin
Pěkný večer všem,

chtěl bych v souboru s titulky (.srt, .vtt) spojit dva nebo x řádků na jeden řádek.
VZOR:
1
00:00:41,501 --> 00:00:44,751
Pokud máte vše pod kontrolou, 

2
00:00:45,042 --> 00:00:50,334
nejedete dostatečně rychle.
- Mario Andretti

3
00:01:22,042 --> 00:01:24,667
Pokračuj, ale moc na to netlač!

4
00:01:39,459 --> 0:01:41,292
Zajeď do boxu.

5
00:02:13,334 --> 00:02:16,501
Tati, mám ho před sebou,
Předjedu ho.




Výstup:
1
00:00:41,501 --> 00:00:44,751
Pokud máte vše pod kontrolou, 

2
00:00:45,042 --> 00:00:50,334
nejedete dostatečně rychle.- Mario Andretti

3
00:01:22,042 --> 00:01:24,667
Pokračuj, ale moc na to netlač!

4
00:01:39,459 --> 00:01:41,292
Zajeď do boxu.

5
00:02:13,334 --> 00:02:16,501
Tati, mám ho před sebou. Předjedu ho.
Ani googl nepomohl. Díky.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Gréta avatar 17.4.2021 21:41 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Odpovědět | | Sbalit | Link | Blokovat | Admin

si to namasti jako skriptík ajeto jako neasi :O ;D

takle třeba v pythonu základ nějakej funkční trošičku víc vošklivější :O ;D

#!/usr/bin/env python3

import sys

vstup = open(sys.argv[1],'r')
vystup = open(sys.argv[2],'w')

radek = vstup.readline()
while radek:
    vystup.write(radek)
    radek = vstup.readline()
    vystup.write(radek)
    radek = vstup.readline()
    vystup.write(radek)
    
    slepenej = ''
    radek = vstup.readline()
    while radek and radek != '\n':
        slepenej = slepenej[:-1] + radek
        radek = vstup.readline()
        
    vystup.write(slepenej)
        
vstup.close()
vystup.close()
python3 prevadedloTitulku.py titulky_vstup.srt titulky_vystup.srt

hotovo!!!!!!!!!!!! :D ;D

oslavná píseň na pana soudruha generalisima prezidentčíka Petra Pavla Pávka 🎶🫡🦚🎶
Jendа avatar 17.4.2021 21:48 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Tvé řešení je kvadratické!!!
Gréta avatar 17.4.2021 22:06 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Josef Kufner avatar 19.4.2021 10:33 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Není, je to lineární. Kvadratické by to bylo, kdyby ten vnitřní cyklus četl řádky od začátku souboru, ale tady se čte každý řádek jen jednou.
Hello world ! Segmentation fault (core dumped)
Jendа avatar 20.4.2021 01:47 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Tohle:
slepenej = slepenej[:-1] + radek
zkopíruje celý dosavadní řetězec a něco k němu přidá. Takže pokud tam bude jeden titulek na strašně moc řádků, tak to bude pomalé (kvadratické).

Samozřejmě jemu se to asi v praxi nestane, proto to nebylo myšleno úplně vážně (ve smyslu že by to Grétino řešení diskvalifikovalo - osobně to pro malé řetězce dělám úplně stejně. Ale chtěl jsem, aby se o tom vědělo, když to někdo začne používat i na jiné účely a pak se bude divit. Viz též různé další případy „accidentally quadratic“. Třeba ten nedávný průšvih se sscanf byl dobrej.)
Josef Kufner avatar 20.4.2021 13:41 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Ach. Jo to by mohlo být. Ale skoro bych si i tipnul, že se to vyoptimalizuje do lineárna, případně to kopírování nebude kopírování, ale jen nějaké reference na substringy.

Nicméně pokud uvažujeme, že jeden frame má jen 1 až K řádků, tak při N počtu framů je složitost N×K, kde K je konstanta a tedy je to stále lineární.
Hello world ! Segmentation fault (core dumped)
20.4.2021 14:01 ajtacka
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
go go go :-)
Jendа avatar 17.4.2021 21:49 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Jinak pro lineární lepení stringů používám že je dám do listu a pak udělám "".join(l).
Gréta avatar 20.4.2021 12:22 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Jendа avatar 17.4.2021 21:47 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/usr/bin/env python3

f = open("vstup", "r")
lines = f.readlines()
lines = [l.strip() for l in lines]

cnt = 0
for l in lines:
  if l == "": # prázdný řádek mezi titulky
    print()
    print()
    cnt = 0
  elif cnt < 3: # číslo titulku a timestamp
    print(l)
  elif cnt >= 3: # text
    print(l, end=" ")
  cnt += 1
na začátku to dělá mezeru dvakrát, to si nějak odlaď
Já to s tou denacifikací Slovenska myslel vážně.
18.4.2021 00:45 rubicon
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nic proti Pythonu, zde bych však volil něco jednoduššího:

awk 'BEGIN {RS=ORS="\n\n"; FS=OFS="\n"} {if (NF>3) for (i=4;i<=NF;i++) $3=$3 " " $i; NF=3; print}' vstup.srt
18.4.2021 23:03 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co použít nějaký editor titulků? Bych se divil, pokud by to nějaký neuměl...
-- OldFrog
20.4.2021 09:31 ajtacka
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Spravna zurnalistika uci ako a kedy nieco bulvarizovat a preto sa tieto obchody nazyvaju bulvar. To vsak neznamena, ze neexistuje Sikma ulicka(plocha) s citanim medzi, ale svet Carodejnikov je niekedy zvlastny a nie niekedy podla predstav.
xxxs avatar 20.4.2021 22:39 xxxs | skóre: 25 | blog: vetvicky
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
prosim tvorcu, aby tento paskvil vypol. dakujem.
Gréta avatar 20.4.2021 22:45 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.

kolik je zajíců když jako jeden de za druhým?????? :O :O

20.4.2021 22:58 ajtacka
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Videla som kedysi nejaky kresleny serial, kde nejaki ludia v nejakej lodi cestuju po vesmire a hladaju miesto, kde by sa usadili. Malo to nieco na sposob zivota v meste, ale bolo to pradavno a neviem ako sa to vola.

Mozno Noemova archa?
20.4.2021 23:44 Olaf
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Ano. Kolik stojí kilo hrušek, když jedna hruška stojí samá v širém poli?
21.4.2021 09:54 romank | skóre: 10 | blog: romank
Rozbalit Rozbalit vše Re: Spojit dva řádky do jednoho.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Skus: tr -d '\n' < input.txt

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.