-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 21/07/2011 08:55, Filadelfo Fiamma ha scritto: > Ciao ragazzi, > 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, ho modo > di vedere soltanto i primi 500, una sorta di TOP(500)? > Ovviamente sto escludendo la soluzioni banale di eseguire os.listdir()[:500]! >
Rispondo a questo vecchio messaggio perchè oggi ho scoperto la syscall del kernel di Linux per leggere direttamente il contenuto di una directory: http://www.kernel.org/doc/man-pages/online/pages/man2/getdents.2.html http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/ In Python non credo ci siano wrappers pronti (sembra non ci siano nemmeno nella libc), ma è abbastanza facile con ctypes. Per vedere soltanto i primi 500 files basta improvvisare un valore opportuno per la dimensione del buffer, tenendo conto della lunghezza media dei nomi di files. La lunghezza di un record dovrebbe essere almeno 16 (per un d_name di lunghezza 1). Sul mio sistema la struttura linux_dirent sembra sia word aligned. Probabilmente ne leggerai un pò di più meno o un pò di meno, nell'ultimo caso basta un ulteriore syscal. Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk6MuBsACgkQscQJ24LbaUQuSwCeOD/eJlsmdln77689w1vWDFut xJMAn3mFftWY99HIzwZR/AxkHI23wYHD =lwnC -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python