2017-10-31 5 views
0

Ich habe ein Python-Skript (dataloader.py), das einige Daten aus einer Datei (data.csv) im selben Verzeichnis wie eine globale Modulebene lädt. Wenn ich das Modul ausführe, lädt es die Datendatei korrekt, aber wenn ich das Modul aus einer Datei (main.py) in ein anderes Verzeichnis importiere, kann es die Datendatei nicht finden.Laden einer lokalen Datei während des Imports

Meine Dateistruktur:

main.py 
myModule/ 
    __init__.py 
    dataloader.py 
    data.csv 

Wie kann man Daten aus einer lokalen Datei während des Imports laden, wenn der Import von überall aufgerufen werden?

Antwort

1

__file__ gibt immer die aktuelle Datei zurück.

dataReader = csv.reader(os.path.dirname(__file__) + "/data.csv") 
+0

Ich mag Ihre Antwort, aber es funktioniert nicht. 'dirname' gibt die Verzeichniskomponente des Pfades' __file__' zurück, aber '__file__' ist nur der Dateiname, hat keinen Pfad. Du hast wahrscheinlich 'os.path.abspath (__ file__) + ...' gemeint. Bitte editieren Sie Ihre Antwort. Sie können auch 'os.path.sep' anstelle des Literals'/'verwenden, um von OS zu abstrahieren. Siehe auch 'pkgutil.get_data (Paket, Ressource)' zum Laden von Ressourcen aus einem Paket. – progmatico

+0

Für mich enthält '__file__' den Pfad zur Datei und die Datei selbst. 'os.path.dirname' gibt mir den absoluten Pfad zum Ordner, was ich brauchte. Die Verwendung eines Literals '/' funktioniert sowohl unter Windows als auch unter POSIX. – jebob

+0

Sie haben Recht (Entschuldigung dafür). WENN das Modul importiert wird, was übrigens gefragt wurde. Aber in einem Skript, das Sie direkt ausführen, hat es nur den Dateinamen des Skripts (das hat zu meinem Fehler geführt). Also "vielleicht immer die aktuelle Datei" aber nicht immer mit dem vollständigen Pfad. Ich kannte das '/' Detail nicht. Nett. – progmatico

Verwandte Themen