2010-01-13 3 views
80

J'ai un petit problème avec ~ dans mes chemins.python - os.makedirs ne comprend pas ~ sur mon chemin?

Cet exemple de code crée des répertoires appelés "~/some_dir", et ne comprend pas que je voulais créer un répertoire dans mon répertoire personnel.

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

Notez que ceci est sur un système basé sur Linux.

Répondre

148

vous avez besoin d'élargir le tilde manuellement:

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

C'est probablement parce que Python n'est pas Bash et ne suit pas les conventions mêmes. Vous pouvez utiliser ceci:

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

La conversion de ~/some_dir à $HOME/some_dir est appelé tilde expansion et est une caractéristique de l'interface utilisateur commune. Le système de fichiers ne sait rien à ce sujet.

En Python, cette fonctionnalité est implémentée par os.path.expanduser:

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

En effet, et il est tout à fait valable d'avoir un fichier ou un répertoire nommé '' ~. Donc, le raccourci de la maison shell est ambigu et préférable d'éviter si vous le pouvez. – bobince

+4

Notez que l'on peut accéder à un fichier/dir nommé "~" dans le répertoire courant même lorsque l'expansion du tilde est en cours, en utilisant la notation "./~". Cela fonctionne parce que ~ l'expansion se produit seulement au début d'un nom de fichier. C'est également un hack pratique pour les noms de fichiers commençant par "-" ou d'autres caractères qui sont traités spécialement par les interfaces de ligne de commande. Vous pourriez dire que j'ai probablement fait beaucoup trop de piratage de script shell. – ddaa

+0

'Le système de fichiers ne sait rien à ce sujet. '+1 – Bin

Questions connexes