Ich bin auf einem Jupyter Notebook- Server (v4.2.2) mit Python 3.4.2 und möchte den globalen Namen verwenden __file__
, da das Notebook von anderen Benutzern geklont wird und ich in einem Abschnitt Folgendes ausführen muss:
def __init__(self, trainingSamplesFolder='samples', maskFolder='masks'):
self.trainingSamplesFolder = self.__getAbsPath(trainingSamplesFolder)
self.maskFolder = self.__getAbsPath(maskFolder)
def __getAbsPath(self, path):
if os.path.isabs(path):
return path
else:
return os.path.join(os.path.dirname(__file__), path)
Die __getAbsPath(self, path)
prüft , ob ein path
param ein relativer oder absoluter Pfad ist und gibt die absolute Version path
. So kann ich die zurückgegebenen path
später sicher verwenden.
Aber ich bekomme den Fehler
NameError: Name
'__file__'
ist nicht definiert
Ich habe online nach diesem Fehler gesucht und die "Lösung" gefunden, die ich besser verwenden sollte sys.argv[0]
, aber print(sys.argv[0])
zurückgibt
/usr/local/lib/python3.4/dist-packages/ipykernel/__main__.py
Der richtige Ort für das Notebook sollte jedoch sein /home/ubuntu/notebooks/
.
Vielen Dank für die Referenz. Wie erhalte ich den aktuellen IPython Notebook-Namen von Martijn Pieters (Kommentare)? Die letzte Antwort (nicht akzeptiert) passt perfekt zu meinen Anforderungen:
print(os.getcwd())
/ home / ubuntu / notebooks
__file__
gilt für Module und Python-Skripte , nicht für Notebooks. Die Antworten, die Sie gefunden haben, gelten hier nicht.