Seite 1 von 1

Path für das Lesen des Inputs

Verfasst: Montag 28. Mai 2012, 19:56
von Barcellona
Hallo zusammen,

ich habe eine Frage.
Und zwar habe ich ein Programm geschrieben, das aus mehreren Teilprogrammen besteht.

Im Hauptordner liegt ein Text (.txt), den ich nun gerne aus dem ersten Teilprogramm heraus einlesen
möchte. Wie spezifiziere ich denn in dem Teilprogramm den Path aus dem gelesen wird.

Ich hab sowas wie "./Input/text.txt" in Erinnerung, gibt mir aber einen Fehler.
Ich möchte also aus dem aktuellen Verzeichnis ein Verzeichnis hochgehen, dort in Input, und dann
die Datei "text.txt" öffnen zum Lesen.

Wie mach ich das am besten? :K

Re: Path für das Lesen des Inputs

Verfasst: Montag 28. Mai 2012, 20:09
von Hyperion
Barcellona hat geschrieben: Und zwar habe ich ein Programm geschrieben, das aus mehreren Teilprogrammen besteht.
Was meinst Du mit "Teilprogrammen"? Module?

Zu Deiner Frage: Ich würde Pfade grundsätzlich nicht in Modulen hart kodieren; wieso übergibst Du den Pfad nicht als Komandozeilenparameter? Oder Du definierst eine Konfigurationsdatei, in der der Pfad steht?

Ein Verzeichnis nach oben wechseln geht mit zwei Punkten:

Code: Alles auswählen

../Input/text.txt

Re: Path für das Lesen des Inputs

Verfasst: Montag 28. Mai 2012, 20:28
von Barcellona
Ok, danke, Hyperion.

Die Idee mit der Konfigurationsdatei hat mir gefallen. Kannst du mir das näher erklären, wie die aussehen könnte?

Weil jeder User kann das Programm ja unter einem anderen Path auf seinem PC haben, müsste ich dann von dem
Hauptordner aus gesehen, den relativen Path in die Konfigurationsdatei schreiben?

Beispiel:

Code: Alles auswählen

Config:
path_subpro1=rel_path+"\subprog1"
input=rel_path+"\Input\input.txt"
So in der Art?

Re: Path für das Lesen des Inputs

Verfasst: Montag 28. Mai 2012, 20:39
von Hyperion
Was ist denn das für eine Datei? Ich meine, ist das eine Datendatei, die fix mit dem Modul / Paket zusammenhängt? Wenn man diese nicht nur Lesen, sondern auch schreiben will, sollte diese *nicht* im Paket selber stehen, da es auf vielen Systemen dort nicht ohne weiteres Schreibzugriffe gibt.

Ich glaube es gibt da keinen perfekten Weg; unter Linux ist es üblich, einen ".programm"-Ordner im Home-Verzeichnis anzulegen, in der Programm spezifische Dateien landen (u.a. auch die Konfigurationsdateien selber ;-) ). Unter Windows gibt es da analoges, aber frag mich nicht, wie es da heißt.

Eine Konfigurationsdatei an sich kann unterschiedlich aussehen. Man kann das direkt in Python machen, man kann eine Datei im INI-Format anlegen, JSON ist auch beliebt und natürlich andere Formate wie YAML oder XML. Vorteil ist, dass es für all diese Module für Python gibt.

Da das Programm nun diese Config-Datei auch wieder finden muss, lohnt sich das also nur dann, wenn da mehr als nur der Pfad zu einer benötigten Datei drin steht ;-)

Worum handelt es sich denn nun bei dieser Datei? Ich meine, ist diese wirklich immer fix oder ist sie variabel für jeden Programmdurchlauf?