Accès aux fichiers avec des chemins relatifs dans les projets Python
Lors de la manipulation de fichiers dans un projet Python, des chemins relatifs sont souvent utilisés pour plus de commodité. Cependant, leur comportement peut devenir ambigu, en particulier lorsqu'il s'agit de structures de projet à plusieurs niveaux.
Considérez la présentation de projet suivante :
project /data test.csv /package __init__.py module.py main.py
Module module.py tente de lire un fichier dans ../data/test.csv en utilisant un chemin relatif, mais lors de l'exécution de main.py, une erreur survient indiquant que le fichier n'est pas trouvé. Cette incohérence apparente vient du fait que le chemin relatif est résolu différemment selon l'endroit où le script est exécuté.
Dans le cas de __init__.py et module.py, le chemin est évalué par rapport au répertoire contenant ces fichiers. Cependant, pour main.py, le chemin est relatif à son propre emplacement.
Résoudre l'ambiguïté du chemin
Pour résoudre cette ambiguïté, des chemins absolus peuvent être utilisés. Alternativement, une approche plus élégante consiste à utiliser l'attribut __file__ de Python :
from pathlib import Path
path = Path(__file__).parent / "../data/test.csv"
with path.open() as f:
test = list(csv.reader(f))
Cette astuce s'appuie sur le module pathlib 3.4 de Python et construit un chemin absolu basé sur l'emplacement du script actuel.
Prise en charge des anciennes versions de Python
Si les versions de Python inférieures à 3.4 sont toujours utilisées, une méthode alternative consiste à manipuler le chemin actuel :
import csv
import os.path
my_path = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(my_path, "../data/test.csv")
with open(path) as f:
test = list(csv.reader(f))
Cette approche combine les fonctions os.path pour obtenir le même résultat que la méthode basée sur pathlib.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3