Re: [Python] listdir
2011/7/21 Filadelfo Fiamma philosga...@gmail.com esiste il modo di limitare il numero di elementi trovati da os.listdir? Se ho una cartella contenente 2 milioni d files, ho modo di vedere soltanto i primi 500, una sorta di TOP(500)? Ovviamente sto escludendo la soluzioni banale di eseguire os.listdir()[:500]! Se non ricordo male, in questo caso dovresti usare le funzioni di livello piu' basso: opendir(), readdir() e closedir() ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
2011/7/21 Filadelfo Fiamma philosga...@gmail.com avrei una curiosità: esiste il modo di limitare il numero di elementi trovati da os.listdir? Se ho una cartella contenente 2 milioni d files, Comunque se hai una cartella cosi', tutti i programmi che ne fanno uso avranno vantaggio dividendola in uno o due livelli di sottocartelle possibilmente di dimensione confrontabile. Cosi' fanno i programmi che devono gestire milioni di file di cache. Se i file non vengono rinominati, una buona idea potrebbe essere usare, come nome delle sottocartelle, la prima parte dell'md5 del nome dei file che andranno a contenere. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
Grazie :) Si concordo appieno sul fatto che avere un unica enorme cartella non è vantaggioso, per fortuna non mi è capitato ancora di avere a che fare con delle directory così piene, ma era solo una mera discussione teorica! Comunque andrò a vedermi dettagliamente opendir(), readdir() e closedir(). Thks FF Il 21 luglio 2011 09:45, Marco Mariani bir...@gmail.com ha scritto: 2011/7/21 Filadelfo Fiamma philosga...@gmail.com avrei una curiosità: esiste il modo di limitare il numero di elementi trovati da os.listdir? Se ho una cartella contenente 2 milioni d files, Comunque se hai una cartella cosi', tutti i programmi che ne fanno uso avranno vantaggio dividendola in uno o due livelli di sottocartelle possibilmente di dimensione confrontabile. Cosi' fanno i programmi che devono gestire milioni di file di cache. Se i file non vengono rinominati, una buona idea potrebbe essere usare, come nome delle sottocartelle, la prima parte dell'md5 del nome dei file che andranno a contenere. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- Filadelfo Fiamma mail: philosga...@gmail.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
Puoi usare glob.iglob, che ritorna un iteratore e non una lista. # esempio1: for filename in os.listdir('.'): print filename # esempio2: for filename in glob.iglob('.'): print filename la differenza tra esempio1 e esempio2 è che nel primo viene generata tutta la lista dei file nella directory (occupando memoria), mentre in esempio2 viene preso un file alla volta (con una occupazione di memoria minima). 2011/7/21 Marco Mariani bir...@gmail.com: 2011/7/21 Filadelfo Fiamma philosga...@gmail.com avrei una curiosità: esiste il modo di limitare il numero di elementi trovati da os.listdir? Se ho una cartella contenente 2 milioni d files, Comunque se hai una cartella cosi', tutti i programmi che ne fanno uso avranno vantaggio dividendola in uno o due livelli di sottocartelle possibilmente di dimensione confrontabile. Cosi' fanno i programmi che devono gestire milioni di file di cache. Se i file non vengono rinominati, una buona idea potrebbe essere usare, come nome delle sottocartelle, la prima parte dell'md5 del nome dei file che andranno a contenere. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- Giovanni Dall'Olio, phd student Department of Biologia Evolutiva at CEXS-UPF (Barcelona, Spain) My blog on bioinformatics: http://bioinfoblog.it ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
2011/7/21 Giovanni Marco Dall'Olio dalloli...@gmail.com la differenza tra esempio1 e esempio2 è che nel primo viene generata tutta la lista dei file nella directory (occupando memoria), mentre in esempio2 viene preso un file alla volta (con una occupazione di memoria minima). Cosa succede dipende poi anche dal file system, se deve accedere a 2 milioni di inode solo per avere il nome dei file, che tipo di alberi o liste utilizza, etc... Io farei di tutto per evitare questa situazione. A oltre 1 milione di file ci sono arrivato e li ho divisi in 1000x1000 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
Giovanni Marco Dall'Olio wrote: Puoi usare glob.iglob, che ritorna un iteratore e non una lista. # esempio1: for filename in os.listdir('.'): print filename # esempio2: for filename in glob.iglob('.'): print filename Bella idea! Credo che per avere un comportamento più simile a esempio1 però dovrebbe essere glob.iglob('*'). Altro problema potrebbe essere nel caso ci siano file nascosti di tipo .nomefile che glob ignora. Lorenzo. la differenza tra esempio1 e esempio2 è che nel primo viene generata tutta la lista dei file nella directory (occupando memoria), mentre in esempio2 viene preso un file alla volta (con una occupazione di memoria minima). 2011/7/21 Marco Mariani bir...@gmail.com: 2011/7/21 Filadelfo Fiamma philosga...@gmail.com avrei una curiosità: esiste il modo di limitare il numero di elementi trovati da os.listdir? Se ho una cartella contenente 2 milioni d files, Comunque se hai una cartella cosi', tutti i programmi che ne fanno uso avranno vantaggio dividendola in uno o due livelli di sottocartelle possibilmente di dimensione confrontabile. Cosi' fanno i programmi che devono gestire milioni di file di cache. Se i file non vengono rinominati, una buona idea potrebbe essere usare, come nome delle sottocartelle, la prima parte dell'md5 del nome dei file che andranno a contenere. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
Il giorno 21 luglio 2011 09:54, Giovanni Marco Dall'Olio dalloli...@gmail.com ha scritto: Puoi usare glob.iglob, che ritorna un iteratore e non una lista. # esempio1: for filename in os.listdir('.'): print filename # esempio2: for filename in glob.iglob('.'): print filename la differenza tra esempio1 e esempio2 è che nel primo viene generata tutta la lista dei file nella directory (occupando memoria), mentre in esempio2 viene preso un file alla volta (con una occupazione di memoria minima). Non ci dovrebbe essere nessuna differenza dato che internamente glob.iglob non fa altro che chiamare os.listdir(). http://hg.python.org/cpython/file/default/Lib/glob.py --- Giampaolo http://code.google.com/p/pyftpdlib/ http://code.google.com/p/psutil/ http://code.google.com/p/pyftpdlib/ ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] listdir
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Il 21/07/2011 09:54, Giovanni Marco Dall'Olio ha scritto: Puoi usare glob.iglob, che ritorna un iteratore e non una lista. Attenzione che iglob è implementato usando os.listdir! L'unica soluzione per avere una lista di directory lazy è usare opendir(), readdir() e closedir(). Pensandoci, strano che la libreria standard non offra niente; listdir per sistemi Posix è implementata usando opendir(), readdir() e closedir(), ma restituisce una lista non un generatore. [...] Ciao Manlio -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk4oGf4ACgkQscQJ24LbaUR/LQCdGj+Unw0boOX60pioSZIdlvgi ++0An0hlFv6erdn9snHMzylPx9dZf291 =Rcgt -END PGP SIGNATURE- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python