Seite 1 von 1
Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 17:55
von mephisto-online
Hallo,
vielleicht eine zu einfache Frage, aber ich finde einfach nichts Brauchbares!
Problem:
In meinem Python Programm möchte ich gerne Files aus Unterverzeichnissen meines Programms lesen. Hierfür möchte ich Konstanten an einen QFileDialog().getOpenFileName(...) mit "directory=KONSTANTE_XYZ" übergeben.
Mit absoluten Pfaden funktioniert das,
ohne Pfad-Angabe lande ich im Programm-Verzeichnis (logisch !).
Wenn ich aber z.B. directory='./daten' übergebe, klappt das nicht und ich lande trotzdem im "Arbeits-Verzeichnis".
Wie definiert man in Python relative Pfadangaben ?
Viele Grüße
mephisto-online
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 17:59
von EyDu
An den Pfad deines Moduls kommst du mittels ``__file__``. Das ist global verfügbar.
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 18:14
von cofi
Genauer gesagt: Jedes Modul hat ein eigenes `__file__` das den Dateipfad des Moduls enthaelt. Mittels `modul.__file__` kann man dann noch auf andere Module zugreifen.
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 19:53
von mephisto-online
Das hatte ich eigentlich auch so gelesen. Aber:
sagt mir '__main__', weil main.py. Nicht den Pfad !

Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 20:17
von Sirius3
@mephisto-online: mir sagt Python, dass er »self« nicht kennt.
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 20:55
von cofi
Die einzige Stelle bei der man "__main__" erwarten kann, ist das `__name__` des "Startskriptes".
Wie du auf die Erklaerung kommst, dass es "__main__" ist, weil die Datei "main.py" heisst ist mir schleierhaft ... ich sehe da zumindest erhebliche Unterschiede zwischen den beiden Namen.
Und falls Sirius' Antwort zu subtil ist: Solange `self` nicht der Name eines Moduls ist, bist du fehl am Platz. Der Name ist `__file__`.
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 21:17
von mephisto-online
Ja sorry, hatte mich mal wieder selbst gefoppt ...
self.__file__ gibt es natürlich nicht !
Aber __file__ :
Code: Alles auswählen
JAVA_DAT_DIR = './Daten' # ????
...
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
...
def import(self):
file_dialog = QFileDialog()
file_name = file_dialog.getOpenFileName(self,
caption='Import ajd ...',
directory=JAVA_DAT_DIR
filter='Java Daten (*.jdf)')
...
def main():
app = QtGui.QApplication(sys.argv)
print(__file__) # Liefert Python-Filename mit vollständigem Pfad
ex = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Liefert Filenamen mit Pfad. Muss ich den jetzt "splitten", den Python-Filenamen entfernen und dann meinen Java-Daten-Verzeichnisnamen anfügen ? Oder geht das auch " eleganter ? (Eigentlich ist Python ja schon "elegant" genug !

)
Aber wie komme ich in MainWindow() da dran ? Parameter ?
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 21:27
von diesch
mephisto-online hat geschrieben:
Liefert Filenamen mit Pfad. Muss ich den jetzt "splitten", den Python-Filenamen entfernen und dann meinen Java-Daten-Verzeichnisnamen anfügen ? Oder geht das auch " eleganter ? (Eigentlich ist Python ja schon "elegant" genug !

)
Code: Alles auswählen
os.path.abspath(os.path.join(os.path.dirname(__file__), JAVA_DAT_DIR))
Re: Relative Datei-System-Pfade ?
Verfasst: Samstag 1. Februar 2014, 21:45
von mephisto-online
Das sieht viel "eleganter" aus !
Mein Vorschlag ist da mehr "gebastelt"
Thanks !!