2011-07-11 14 views
5

Soy nuevo en Python, así que puede que me esté yendo completamente mal, pero estoy teniendo problemas para obtener y cambiar al directorio de un archivo. Mi script toma varios nombres de archivos que pueden estar en cualquier directorio. En mi script, necesito que Python cambie al directorio del archivo y luego realice algunas acciones. Sin embargo, tengo problemas para cambiar directorios.Formateo de rutas de archivos

Esto es lo que he probado hasta ahora:

path=os.path.split(<file path>) 
os.chdir(path[0]) 
<Do things to file specified by path[1]> 

La forma en que he estado recibiendo la ruta del archivo es arrastrando desde el explorador a la línea de comandos. Esto ingresa el nombre de ruta como algo como "C:\foo\bar\file_name.txt". Cuando ejecuto la primera línea en el intérprete, salgo ('C:\\foo\bar','file_name.txt'). El problema es que, por alguna razón, la última barra invertida no se escapa automáticamente, así que cuando ejecuto la línea os.chdir(path[0]) obtengo errores.

Mi pregunta es por qué la última barra invertida no se escapa automáticamente como las demás? ¿Cómo puedo escapar manualmente la última barra invertida? ¿Hay una mejor manera de obtener el directorio del archivo y cambiarlo?

+0

Es un poco inusual (aunque no siempre mal) despedir a python para ejecutar cosas en el símbolo del sistema. ¿Qué son exactamente "realizar algunas acciones"? Tal vez solo puedan hacerse en Python directamente. – Gerrat

+0

No creo que rhololkeolke esté saliendo del shell de Python; aún puede arrastrar archivos a la ventana de la consola para obtener la ruta mientras está dentro del caparazón, como noté recientemente. Por supuesto, incluso si tuviera que hacer algo fuera del caparazón, si es solo una acción, podría simplemente usar 'os.system()'. E incluso si se trata de acciones múltiples, si es algo que se repite a menudo, también podría escribir un archivo por lotes y llamarlo usando 'os.system()'. Por supuesto, nada de eso tiene que ver con lo que Rhololkeolke estaba preguntando. – JAB

Respuesta

5

La última barra diagonal inversa no se escapa automáticamente porque Python solo escapa barras invertidas en cadenas normales cuando el siguiente carácter no forma una secuencia de escape con la barra invertida. De hecho, en su ejemplo, NO obtendría 'C:\\foo\bar' de 'C:\foo\bar', obtendría 'C:\x0coo\x08ar'.

Lo que quiere hacer es reemplazar las barras diagonales inversas con barras diagonales, o para simplificar las operaciones de arrastrar y soltar, simplemente antependa la ruta con r para que sea una cadena bruta y no reconozca las secuencias de escape .

>>> os.path.split(r"C:\foo\bar\file_name.txt") 
('C:\\foo\\bar','file_name.txt') 
+0

Gracias. Funciona perfecto ahora – rhololkeolke

+0

De nada. – JAB

2

Está utilizando los módulos y métodos correctos. Justo cuando se está poniendo ese camino ventanas ahí, que la cadena de una cadena de texto, por lo que su comando debería ser similar:

path=os.path.split(r'C:\foo\bar\file_name.txt') 

Nota del r delante de la primera cita, que hace Python no trata a las barras invertidas en la cadena como secuencias de escape.

Cuestiones relacionadas