Relativer Pfad

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
chposc
User
Beiträge: 2
Registriert: Dienstag 19. Juni 2018, 20:41

Hallo zusammen,

ich hätte eine Frage an euch. Ich bin absoluter Neuling hier und auch in der Programmiersprache Python. Ich habe einmal zum Spaß ein Excel-File eingelesen und die benötigten Daten daraus in eine Datenbank geschrieben. Alles funktioniert, jedoch werde ich immer häufiger gefragt, wenn ich diesen Code übergeben will, warum ich keinen relativen Pfad mache. Kann mir irgendjemand bitte erklären, wofür ich diesen brauche und wie ich diesen bei meinem Beispiel anwenden kann? Für Hilfe wäre ich sehr dankbar.

Code: Alles auswählen

file = r'C:\Users\chposc\Testdaten\TestExcelFile_{:%Y%m%d}*.XLS'

wb = xlrd.open_workbook(max(iglob(file.format(d))))
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

`file` ist bei dir ein absoluter Pfad. Soll heißen, ein vollständiger Pfad vom Ursprungsverzeichnis deines Datenträgers bis hin zu deiner Python-Datei/Skript/wasauchimmer. Das kann dann problematisch werden, wenn jemand anderes dein Skript verwenden möchte, da bei diesem der absolute Pfad schlicht anders ausschaut da er vielleicht den Pfad "C:\users\detlef\usw.\usf." hat.

Sieh' dich mal im Pathlib oder os.path-Modul um. Dort stehen dir Methoden bereit mit denen du den Pfad zu deinem Skript von Python automatisch zusammenschrauben lassen kannst. Relative Pfade sind z.b. dann nützlich, wenn du in einem Ordner mehrere Python-Skripte hast die `relativ` zu einander in Beziehung stehen:

z.B.:

bla\dein_rogramm_ordner\
- skript1.py
- skript2.py

Möchte nun skript1.py irgendwas mit skript2.py anstellen, aufrufen oder weiß der geier was, musst du von dort aus nicht den absoluten, also vollständigen Pfad angeben, sondern kannst auf die Datei im selben Verzeichnis zeigen: -> .\skript2.py

Oder wenn du ein Verzeichnis höher springen möchtest und auf den Ordner `bla` zugreifen willst: -> ..\..\bla

Mehr infos hier: https://msdn.microsoft.com/en-us/librar ... s.85).aspx
When we say computer, we mean the electronic computer.
chposc
User
Beiträge: 2
Registriert: Dienstag 19. Juni 2018, 20:41

Vielen Dank für die Antwort.

Also ich habe jetzt mal einen Pfad erstellt, wenn es Ihn gibt zeigt er an er ließt daraus und wenn nicht legt er ihn an, geht das in die richtige Richtung?

Code: Alles auswählen

DirectoryPath = r'C:\Users\chposc\Desktop\Pythontestdaten'
if not os.path.exists(DirectoryPath):
       os.mkdir(DirectoryPath)
       print("Neuer Pfad angelegt")

if os.path.exists(DirectoryPath):
    print("Ausgewerteter Inhalt des Ordners " + DirectoryPath)


file = r'C:\Users\chposc\Desktop\Pythontestdaten\Exceltestfile_{:%Y%m%d}*.XLS'

Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Nicht ganz, denn der Pfad "'C:\Users\chposc\Desktop\Pythontestdaten'" wird bei mir am Rechner bspw. nicht existieren, dein Programm würde ihn aber für mich anlegen, obwohl `ich` nicht `du` bin, und somit auch diesen Heimordner `chposc` nicht gebrauchen kann.

Was du eher möchtest ist vermutlich das hier:

Code: Alles auswählen

os.path.dirname(__file__)
Das meinte ich mit "zusammenschrauben". Python ermittelt eigenständig den absoluten Pfad zu deinem Skript. Probier's mal aus. Dann siehst du was ich meinte. Bei mir bspw. würde dann so etwas kommen wie:

/home/sls/pfad/zum/skript/

(Die Pfadstruktur sieht etwas anders aus als bei dir, da ich ein Linux-System verwende)
When we say computer, we mean the electronic computer.
Antworten