Forum
>>
Principianti
>>
Gestione file .txt - tempi di traduzione
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Dperla |
2020-06-04 15:46:26 - Gestione file .txt - tempi di traduzione
|
Buongiorno a tutti,
sono alle prime armi con il Python... assolutamente non sono un utente esperto. Per un'altra applicazione, ho necessità di leggere da un file, verificare la sintassi (eventualmente modificandola) e creare un file in uscita con la sintassi modificata. for line in fileinput.input(): line = re.sub(r'^T(.*)',r'T=\1 ', line.rstrip()) print(line) Il problema che sto riscontrando è nel tempo di scansione. Per file di pochi MB il problema è trascurabili, ma su un file da 100MB i tempi aumentano notevolmente (più di 2 minuti). Ci sarebbe un modo di ottimizzare i tempi di traduzione? Grazie a tutti |
|
Scritto da RicPol |
2020-06-04 21:20:34 - Re: Gestione file .txt - tempi di traduzione
|
Mah... non so se il tempo è dovuto alla regex o a fattori collaterali. Per esempio, di sicuro il "print" consuma un sacco di tempo... spero che tu non faccia davvero una cosa del genere... Se poi addirittura fai tutto questo da dentro Idle... beh, allora oltre ai minuti trascorsi, dovresti preoccuparti di non mandare a fuoco il processore. Ma spero davvero che non farai niente di così ingenuo.
Posto che (sicuramente) starai scrivendo il risultato in un altro file invece di fare "print", il secondo problema è ovviamente quello di "rstrip", che ti consuma inutilmente un secondo giro di valzer su ciascuna riga. Non capisco perché non fai fare anche questa operazione alla regex, già che ci sei. Qualcosa come "re.sub(r'^T(.*?)\s*$', r'T=\1', line)" e ti togli il problema. Ipotizzo che una volta tolto di mezzo "rstrip", la velocità migliori già parecchio. Dopo di che, non c'è più molto da fare... le regex sono lentine di necessità. Ovviamente puoi compilare la regex una volta per tutte, invece di ri-utilizzarla a ogni riga. Qualcosa come "pattern = re.compile(r'^T(.*?)\s*$')", e poi "re.sub(pattern, r'T=\1', line)". Quando hai centinaia di migliaia di righe, dovrebbe fare una certa differenza. Più di così... non saprei... certo mi sembra un po' uno spreco usare una regex solo per sostituire una "T" iniziale con un "T="... se tutte le righe iniziano per "T", io farei il tentativo di vedere se semplicemente con la manipolazione delle stringhe non è più veloce. https://pythoninwindows.blogspot.com/p/i-miei-libri.html : i miei libri
https://pythoninwindows.blogspot.com : il mio blog |
|
Scritto da Dperla |
2020-06-05 08:58:53 - Re: Gestione file .txt - tempi di traduzione
|
Buongiorno e grazie per i consigli.
Stamattina modifico il batch con i tuoi suggerimenti e ti aggiorno "se la situazione va meglio". Giusto per chiarimento, quello che ho necessità di fare e, per ogni riga, verificare se sono presenti delle particolari stringhe (non solo T, ho diverse combinazioni da considerare) e "riadattarle" per dare in pasto il risultato ad un'altra applicazione su un altro sistema. Spero, grazie a te, di riuscire ad ottimizzare il tempo ciclo |
Pagina: 1
Esegui il login per scrivere una risposta.