[Python] split di file di grandi dimensioni

Daniele Varrazzo piro a develer.com
Ven 4 Dic 2009 19:33:48 CET


On Fri, 04 Dec 2009 19:05:12 +0100, Pietro Battiston <toobaz a email.it>
wrote:
> Il giorno ven, 04/12/2009 alle 13.39 +0100, Daniele Varrazzo ha scritto:

>> Io infatti avrei salvato tutti i dizionari dopo un numero prefissato di
>> righe lette dal file di input. In questo modo l'occupazione di memoria
è
>> controllata e le prestazioni credo siano in linea (qualche file
potrebbe
>> avere poche righe, ma se su 1000 file aperti si scrivono 1M di righe
>> statisticamente siamo lì). Credo sia anche molto più semplice da
>> scrivere e
>> meno soggetto ad errori.
>> 
> 
> A me sembrerebbe più efficiente una via di mezzo: si scrive su file ogni
> volta che si è raggiunta l'occupazione massima di memoria, ma si scrive
> solo il file con più righe (da scrivere).
> 
> Significa semplicemente ogni volta che c'è da scrivere fare un max su
> una lista di 1000 elementi (quella delle lunghezze, che può essere
> tranquillamente creata al volo - len ha costo costante, giusto?), e non
> mi sembra che possa avere un gran impatto, anche nel caso pessimo in cui
> le righe destinate ai diversi file ricorrano con frequenze molto simili.

Questo non occupa una quantità di memoria costante: potrebbe essere
difficile da controllare (metti se per esempio molti dei file si "gonfiano"
ma poi restanto a lungo non chiamati in causa: questi resterebbero in ram
per non far niente). Ha anche alcune quadraticità (il singolo len è o(1) ma
il max è o(n)).

Come caso pessimo la tua ricetta ha quello delle frequenze simili, La mia
ha il caso in cui in ogni blocco di record letti (es. 1 milione) ogni
record vada in un file distinto (es. 999 record in 999 file, tutti gli
altri in uno solo). Il mio caso pessimo mi sembra più improbabile :)

Anche come implementazione la mia ricetta mi sembra più semplice.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python