2010-01-13 14 views
80

Tengo un pequeño problema con ~ en mi camino.python - os.makedirs no entienden ~ en mi camino?

Este ejemplo de código crea algunos directorios llamados "~/some_dir", y no entiendo que quería crear some_dir en mi directorio de inicio.

my_dir = "~/some_dir" 
if not os.path.exists(my_dir): 
    os.makedirs(my_dir) 

Tenga en cuenta que esto es en un sistema basado en Linux.

Respuesta

148

necesita ampliar la tilde manualmente:

my_dir = os.path.expanduser('~/some_dir') 
12

Eso es probablemente porque Python no es Bash y no sigue las convenciones mismas. Usted puede usar esto:

homedir = os.path.expanduser('~') 
52

La conversión de ~/some_dir a $HOME/some_dir se llama tilde expansion y es una característica interfaz de usuario común. El sistema de archivos no sabe nada al respecto.

En Python, esta característica se implementa mediante os.path.expanduser:

my_dir = os.path.expanduser("~/some_dir") 
+0

De hecho, y es perfectamente válido tener un archivo o directorio llamado '' ~. Entonces, el atajo de inicio de shell es ambiguo y es mejor evitarlo si puedes. – bobince

+4

Tenga en cuenta que uno PUEDE acceder a un archivo/directorio llamado "~" en el directorio actual incluso cuando se está produciendo una expansión de tilde, usando la notación "./~". Eso funciona porque ~ la expansión solo ocurre al comienzo de un nombre de archivo. También es un truco conveniente para nombres de archivos que comienzan con "-" u otros caracteres que son tratados especialmente por interfaces de línea de comando. Se podría decir que probablemente he hecho demasiado pirateo de script shell. – ddaa

+0

'El sistema de archivos no sabe nada al respecto. +1 – Bin

Cuestiones relacionadas