Pourquoi les chemins relatifs dans les projets Python entraînent-ils des erreurs de fichier introuvable ?

Barbara Streisand
Libérer: 2024-11-01 11:39:02
original
516 Les gens l'ont consulté

Why Do Relative Paths in Python Projects Lead to File Not Found Errors?

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 disposition de projet suivante :

project
    /data
        test.csv
    /package
        __init__.py
        module.py
    main.py
Copier après la connexion

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 :

<code class="python">from pathlib import Path

path = Path(__file__).parent / "../data/test.csv"

with path.open() as f:
    test = list(csv.reader(f))</code>
Copier après la connexion

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 :

<code class="python">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))</code>
Copier après la connexion

Cette approche combine les fonctions os.path pour obtenir le même résultat que la méthode basée sur pathlib.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!