web-dev-qa-db-fra.com

Créer un chemin de fichier à partir de variables

Je cherche des conseils sur la meilleure façon de générer un chemin de fichier à l'aide de variables, actuellement mon code ressemble à ce qui suit:

path = /my/root/directory
for x in list_of_vars:
        if os.path.isdir(path + '/' + x):  # line A
            print(x + ' exists.')
        else:
            os.mkdir(path + '/' + x)       # line B
            print(x + ' created.')

Pour les lignes A et B comme indiqué ci-dessus, existe-t-il une meilleure façon de créer un chemin de fichier car cela deviendra plus long à mesure que je plongerai dans l'arborescence des répertoires?

J'envisage une méthode intégrée existante à utiliser comme suit:

create_path(path, 'in', 'here')

produisant un chemin de la forme /my/root/directory/in/here

S'il n'y a pas de fonction intégrée, je vais m'en écrire une.

Merci pour toute contribution.

37
Thorsley

Oui, il existe une telle fonction intégrée: os.path.join .

>>> import os.path
>>> os.path.join('/my/root/directory', 'in', 'here')
'/my/root/directory/in/here'
74
kennytm

Vous voulez la fonction path.join () de os.path.

>>> from os import path
>>> path.join('foo', 'bar')
'foo/bar'

Cela crée votre chemin avec os.sep (au lieu du moins portable '/') et le fait plus efficacement (en général) que l'utilisation de +.

Cependant, cela ne créera pas réellement le chemin. Pour cela, vous devez faire quelque chose comme ce que vous faites dans votre question. Vous pourriez écrire quelque chose comme:

start_path = '/my/root/directory'
final_path = os.join(start_path, *list_of_vars)
if not os.path.isdir(final_path):
    os.makedirs (final_path)
13
nmichaels

Vous pouvez également utiliser un chemin orienté objet avec pathlib (disponible en tant que bibliothèque standard à partir de Python 3.4):

from pathlib import Path

start_path = Path('/my/root/directory')
final_path = start_path / 'in' / 'here'
0
AlexandreS