Estoy escribiendo y probando el código en XPsp3 w/python 2.7. Estoy ejecutando el código en el servidor 2003 w/python 2.7. Mi estructura de directorio se verá algo como estopython enumerando los directorios en un orden diferente basado en la plataforma
d:\ssptemp
d:\ssptemp\ssp9-1
d:\ssptemp\ssp9-2
d:\ssptemp\ssp9-3
d:\ssptemp\ssp9-4
d:\ssptemp\ssp10-1
d:\ssptemp\ssp10-2
d:\ssptemp\ssp10-3
d:\ssptemp\ssp10-4
Dentro de cada directorio hay uno o más archivos que tendrán "IWPCPatch" como parte del nombre de archivo.
Dentro de uno de estos archivos (uno en cada dir), habrá la línea 'IWPCPatchFinal_a.wsf'
Lo que hago es
1) os.walk en todos los directorios en D: \ ssptemp
2) Buscar todos los archivos con 'IWPCPatch' en el nombre del archivo
3) comprobar el contenido del archivo para 'IWPCPatchFinal_a.wsf'
4) Si co ntents es cierto. Agrego la ruta de ese archivo a una lista.
Mi problema es que en mi máquina XP funciona bien. Si imprimo los resultados de la lista, obtengo varios artículos en el orden que indiqué anteriormente.
Cuando lo muevo a la máquina del servidor 2003 obtengo los mismos contenidos en un orden diferente. Viene ssp10-X, luego ssp9-X. Y esto me está causando problemas con un área diferente en el programa.
Puedo ver por mi salida que comienza el os.walk en el orden incorrecto, pero no sé por qué ocurre eso.
import os
import fileinput
print "--createChain--"
listOfFiles = []
for path, dirs, files in os.walk('d:\ssptemp'):
print "parsing dir(s)"
for file in files:
newFile = os.path.join(path,file)
if newFile.find('IWPCPatch') >= 0:
for line in fileinput.FileInput(newFile):
if "IWPCPatchFinal_a.wsf" in line:
listOfFiles.append(newFile)
print "Added", newFile
for item in listOfFiles:
print "list item", item
Lo que él dijo. No confíe en que el sistema operativo haga lo correcto (especialmente en el caso de Windows, que varía mucho entre cada versión). Ordene los datos por su cuenta antes de iterarlos. – jathanism
Eso es lo que pensé que ibas a decir :( – ccwhite1
Si hago un list.sort() en XP, los pone en el mismo orden que 2003. Lo que puedo hacer es extraer los números en el nombre del directorio y crear el lista como [ruta, X, Y] (es decir [, 10,1]). Luego podría hacer algún tipo de ordenamiento en la columna X, Y. Pero ¿cómo se hace una clasificación de 2 columnas? –
ccwhite1