web-dev-qa-db-fra.com

Os.makedirs de Python ne comprend pas "~" dans mon chemin

J'ai un petit problème avec ~ dans mes chemins.

Cet exemple de code crée des répertoires appelés "~/some_dir" et ne comprend pas que je veuille créer some_dir 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.

103
Johan

Vous devez développer le tilde manuellement:

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

La conversion de ~/some_dir en $HOME/some_dir s'appelle tilde expansion et constitue une fonctionnalité d'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")
62
ddaa

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

homedir = os.path.expanduser('~')
13
gruszczy
from srblib import verify_folder

verify_folder('path/to/folder')

Il créera un dossier sinon il ne créera pas de dossier.

NOTE: il créera également des dossiers dans le chemin (si nécessaire)

srb@srb-pc:~/hello$ ls
srb@srb-pc:~/hello$ python3 
>>> from srblib import verify_folder
>>> verify_folder('~/hello/A/B')
>>> exit()
srb@srb-pc:~/hello$ ls
A
srb@srb-pc:~/hello$ ls A
B
srb@srb-pc:~/hello$ 

Cette fonction fonctionne comme mkdir -p path/to/folder

0
srbcheema1

Vous pouvez maintenant le faire comme

from srbib import abs_path
my_dir = abs_path('~/path/to/dir')
if not os.path.exists(my_dir):
    os.makedirs(my_dir)

Veuillez vous référer à https://stackoverflow.com/a/54190233/6799074 pour l'utilisation de srblib.abs_path

0
srbcheema1