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.
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'
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)
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'