[Python] split di file di grandi dimensioni

Ivan Giuliani giuliani.v a gmail.com
Ven 4 Dic 2009 12:43:30 CET


On Fri, Dec 4, 2009 at 12:40 PM, Daniele Varrazzo <piro a develer.com> wrote:
> On Fri, 4 Dec 2009 12:34:15 +0100, Ernesto <e.picardi a unical.it> wrote:
>
>> Per ora il modo pių semplice che ho trovato č:
>>
>> import os
>> f=open(infile)
>> for i in f:
>>       l=(i.strip()).split("\t")
>>       out=open(l[2]+".txt","a")
>>       out.write(i)
>>       out.close()
>> f.close()
>>
>> Lanciato su un file di 15GB il tempo necessario per completare il
>> tutto č superiore ai 2 giorni.
>> C'č un modo per velocizzare il processo?
>
> Perchč apri e chiudi i file ad ogni riga? Ogni volta gli fai flushare il
> buffer. Lasciali aperti:
>
> # NON TESTATO
>
> files = {}
> for c in "ABC:
>    files[c] = open(c + ".txt","a")
>
> f=open(infile)
> for i in f:
>    l=(i.strip()).split("\t")
>    files[l[2]].write(i)
>
> f.close()
> for f in files.values():
>    f.close()

Aggiungo che su file di queste dimensioni ti conviene fare buffered
reading/writing. Se usi python 2.6 vedi TextIOWrapper
(http://docs.python.org/library/io.html).


-- 
(+39) 349 05 37 906


Maggiori informazioni sulla lista Python