„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum führen relative Pfade in Python-Projekten zu Fehlern, bei denen die Datei nicht gefunden wurde?

Warum führen relative Pfade in Python-Projekten zu Fehlern, bei denen die Datei nicht gefunden wurde?

Veröffentlicht am 07.11.2024
Durchsuche:141

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

Zugriff auf Dateien mit relativen Pfaden in Python-Projekten

Beim Bearbeiten von Dateien innerhalb eines Python-Projekts werden der Einfachheit halber häufig relative Pfade verwendet. Ihr Verhalten kann jedoch mehrdeutig werden, insbesondere wenn es sich um mehrstufige Projektstrukturen handelt.

Bedenken Sie das folgende Projektlayout:

project
    /data
        test.csv
    /package
        __init__.py
        module.py
    main.py

Modul module.py versucht, eine Datei in ../data/test.csv unter Verwendung eines relativen Pfads zu lesen, aber beim Ausführen von main.py tritt ein Fehler auf, der darauf hinweist, dass die Datei nicht gefunden wurde. Diese offensichtliche Inkonsistenz ergibt sich aus der Tatsache, dass der relative Pfad unterschiedlich aufgelöst wird, je nachdem, wo das Skript ausgeführt wird.

Im Fall von __init__.py und module.py wird der Pfad relativ zu dem Verzeichnis ausgewertet, das diese enthält Dateien. Für main.py ist der Pfad jedoch relativ zu seinem eigenen Speicherort.

Auflösen der Pfadmehrdeutigkeit

Um diese Mehrdeutigkeit aufzulösen, können absolute Pfade verwendet werden. Alternativ besteht ein eleganterer Ansatz darin, das __file__-Attribut von Python zu verwenden:

from pathlib import Path

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

with path.open() as f:
    test = list(csv.reader(f))

Dieser Trick basiert auf dem Pathlib-Modul 3.4 von Python und erstellt einen absoluten Pfad basierend auf dem Speicherort des aktuellen Skripts.

Unterstützung älterer Python-Versionen

Wenn noch Python-Versionen unter 3.4 verwendet werden, besteht eine alternative Methode darin, den aktuellen Pfad zu manipulieren:

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

Dieser Ansatz kombiniert os.path-Funktionen, um das gleiche Ergebnis wie die Pathlib-basierte Methode zu erzielen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3