¿Por qué no es os.walk reconocer mi nombre de variable?
-
10-10-2019 - |
Pregunta
He escrito lo siguiente en TextWrangler:
directory = raw_input("See contents of: ")
for root, dirs, files in os.walk(directory):
print root, dirs, files
Por desgracia, cuando lo ejecuto en el terminal y asignar la ruta del directorio escribiendo o arrastrando una carpeta desde el muelle no pasa nada. Ni siquiera un mensaje de error. Por otro lado cuando entro en el siguiente en TextWrangler a continuación, ejecutar el programa en el terminal, funciona bien.
for root, dirs, files in os.walk("/Users/paulpatterson/Documents/Python"):
print root, dirs, files
Mi pregunta entonces, ¿por qué no aceptar os.walk una trayectoria en forma de una variable. El libro que estoy usando sugiere que debería, al igual que la mayoría de los ejemplos que he visto en la red al mismo tiempo tratando de resolver esto.
Solución
Simplemente print directory
antes del bucle para ver cuál es el camino que realmente conseguir. Ese es el problema, no es que no está aceptando os.walk
variables.
Cuando se coloca una carpeta en OSX en el terminal:
- caracteres especiales como espacios consiguen escaparon para el uso en la cáscara
- se inserta un espacio después del nombre del directorio
Tanto evitará os.walk de encontrar el camino. Que no se obtiene un error es simple. os.walk no da un error para ese caso. Simplemente no lo hace iterar sobre el camino que no existe.
Otros consejos
Por desgracia, cuando lo ejecuto en terminal y asignar la ruta del directorio escribiendo o arrastrando una carpeta desde el muelle no pasa nada.
He intentado esto, como usted ha dicho, arrastrando la carpeta de mi terminal (estoy en Linux) y muestra el camino rodeado de comillas.
Eliminar las comillas después de su raw_input
debe arreglar el problema
import os
directory = raw_input("See contents of: ")
directory = directory.strip()
if directory[0] == "'" and directory[-1] == "'":
directory = directory[1:-1]
print directory
for root, dirs, files in os.walk(directory):
print root, dirs, files