I file sul filesystem non sono ordinati. È possibile ordinare i nomi dei file risultanti da soli, usando il sorted()
function:
for infile in sorted(glob.glob('*.txt')):
print "Current File Being Processed is: " + infile
Si noti che la chiamata os.path.join
nel codice è un no-op; con un solo argomento non fa altro che restituire inalterato quell'argomento.
Si noti che i file verranno ordinati in ordine alfabetico, che inserisce 10
prima del 9
. È possibile utilizzare una funzione chiave personalizzata per migliorare l'ordinamento:
import re
numbers = re.compile(r'(\d+)')
def numericalSort(value):
parts = numbers.split(value)
parts[1::2] = map(int, parts[1::2])
return parts
for infile in sorted(glob.glob('*.txt'), key=numericalSort):
print "Current File Being Processed is: " + infile
La funzione numericalSort
divide eventuali cifre in un nome di file, lo trasforma in un numero reale, e restituisce il risultato per l'ordinamento:
>>> files = ['file9.txt', 'file10.txt', 'file11.txt', '32foo9.txt', '32foo10.txt']
>>> sorted(files)
['32foo10.txt', '32foo9.txt', 'file10.txt', 'file11.txt', 'file9.txt']
>>> sorted(files, key=numericalSort)
['32foo9.txt', '32foo10.txt', 'file9.txt', 'file10.txt', 'file11.txt']
fonte
2012-08-23 14:31:19
HI. Sfortunatamente, la funzione ordinata non cambia l'ordine. – user1620012
@ user1620012: aggiornata la mia risposta per migliorare l'ordinamento. –
hi..actually i miei file hanno nomi come .. text-text9-text.txt, text-text10-text.txt ecc. – user1620012