Portál AbcLinuxu, 9. května 2025 18:49
zdravím, v pythonu začínám a nemám takový přehled o jazyce a knihovnách
Řešil jsem problém s parsováním textového vstupu (text oddělený rourama, ale na každém řádku jiný počet sloupců a také některé položky obsahovaly znak '\r') - takže celkem legrace
Jeden "blok" (nebudu říkat řádek, protože to není prvada) vypadá třeba takhle:
|START|ahoj | text|zase nejaky text ktery je docela dlouhy| polozka|STOP|
základní smyčka programu načítá tento jeden blok (jediné co vím, že začíná přesně |START| a končí přesně |STOP|) pomocí sys.stdin.read(1). jednotlivé položky ukládám do pole, které po přečtení jednoho bloku zpracuji a vyhodím na výstup
dneska sem ale zjistil, ze na vstupu budou asi 4GB (pri soucasnem vykonu by to trvalo asi 8h), takze: jak zefektivnit vstup? (docela by to chtelo )/p>
jednotlivé položky ukládám do pole, které po přečtení jednoho bloku zpracuji a vyhodím na výstupOtázka zní jinak, co to znamená zpracuje? Je možné zpracovat jeden token a ihned ho vypsat, nebo je potřeba mít celý soubor načtený v poli a až potom zpracovávat? Je možné třeba pustit čtení v jednom vláknu a zpracovávání (po načtení nějakého minimálního vstupu) ve druhém? BTW: pokud je výkon kritický a budeš zpracovávat 4GB soubory, poohlédl bych se spíše po C.
které po přečtení jednoho bloku zpracuji a vyhodím na výstupasi sem se zeptal spatne: jak moc je v pythonu efektivni sys.stdin.read(1) ? ja jsem spise javista... takze do Ccka bych se vubec nehrnul
$ seq 1000000 > milion.txt $cat read #!/usr/bin/python import sys while (sys.stdin.read(1)): pass $ time cat milion.txt | ./read real 0m13.338s user 0m13.233s sys 0m0.068s
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.