Ya no tienes que indagar más por todo internet ya que has llegado al sitio perfecto, tenemos la respuesta que buscas sin problema.
Solución:
Los archivos en el sistema de archivos no están ordenados. Puede ordenar los nombres de archivo resultantes usted mismo usando el sorted()
función:
for infile in sorted(glob.glob('*.txt')):
print "Current File Being Processed is: " + infile
Tenga en cuenta que el os.path.join
llamar a su código no es operativo; con un solo argumento no hace nada más que devolver ese argumento sin cambios.
Tenga en cuenta que sus archivos se clasificarán en orden alfabético, lo que pone 10
antes de 9
. Puedes usar una personalizada key función para mejorar la clasificación:
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
Él numericalSort
La función divide cualquier dígito en un nombre de archivo, lo convierte en un número real y devuelve el resultado para ordenar:
>>> 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']
Puedes envolver tu glob.glob( ... )
expresión dentro de un sorted( ... )
instrucción y ordene la lista resultante de archivos. Ejemplo:
for infile in sorted(glob.glob('*.txt')):
Puedes dar sorted
una función de comparación o, mejor, utilizar el key= ...
argumento para darle una costumbre key que se utiliza para clasificar.
Ejemplo:
Se encuentran los siguientes archivos:
x/blub01.txt
x/blub02.txt
x/blub10.txt
x/blub03.txt
y/blub05.txt
El siguiente código producirá la siguiente salida:
for filename in sorted(glob.glob('[xy]/*.txt')):
print filename
# x/blub01.txt
# x/blub02.txt
# x/blub03.txt
# x/blub10.txt
# y/blub05.txt
Ahora con key función:
def key_func(x):
return os.path.split(x)[-1]
for filename in sorted(glob.glob('[xy]/*.txt'), key=key_func):
print filename
# x/blub01.txt
# x/blub02.txt
# x/blub03.txt
# y/blub05.txt
# x/blub10.txt
EDITAR:
Posiblemente esto key función puede ordenar sus archivos:
pat=re.compile("(d+)D*$")
...
def key_func(x):
mat=pat.search(os.path.split(x)[-1]) # match last group of digits
if mat is None:
return x
return ":>10".format(mat.group(1)) # right align to 10 digits.
Seguro que se puede mejorar, pero creo que entiendes el punto. Las rutas sin números se dejarán solas, las rutas con números se convertirán en un string que tiene 10 dígitos de ancho y contiene el número.
Nos encantaría que puedieras dar recomendación a este artículo si te fue de ayuda.