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.
test = "datei.txt"
with open(test) as datei:
for line in datei:
print line
Das Problem ist: Im Moment muss die Datei datei.txt im gleichen Verzeichnis liegen wie das Script. Ich möchte jetzt die Datei datei.txt in ein anderes Verzeichnis verschieben und in meinem Script dann relativ darauf zugreifen etwa so: \..\folder1\datei.txt
@Killigen: Der Name `__file__` ist in jedem Modul definiert und enthält den Pfad/Dateinamen des Moduls. Davon ausgehend kann man sich mit den Funktionen in `os.path` (`dirname()`, `join()`) den passenden Pfad zusammenstellen.
Ist mir nicht ganz klar wie du das meinst... Könntest du evtl. einen Beispielcode posten?
Mir ist klar dass ich mit __file__ den absoluten Pfad des Scripts bekomme aber ich möchte von diesem Verzeichnis quasi \..\ machen also ein Verzeichnis nach oben und von dort aus wieder in einen anderen Ordner springen ohne konkrete also absolute Verzeichnisse anzugeben. Könntest du dafür bitte Beispielcode posten?
Zuletzt geändert von Killigen am Montag 27. April 2015, 11:26, insgesamt 1-mal geändert.
Killigen hat geschrieben:Im Moment muss die Datei datei.txt im gleichen Verzeichnis liegen wie das Script. Ich möchte jetzt die Datei datei.txt in ein anderes Verzeichnis verschieben und in meinem Script dann relativ darauf zugreifen etwa so: \..\folder1\datei.txt
@MagBen: Habe deinen Vorschlag ausprobiert. Leider kommt hier: No such file or directory: '../folder2/datei.txt'
Die Datei ist aber sehr wohl vorhanden...
@sparrow: Auf wie Idee wäre ich auch schon gekommen aber sie ist vorhanden... Ich habe einen Ordner folder1 in dem befindet sich das Skript. Außerdem habe ich einen Ordner folder2 in dem ist die txt-datei beide Ordner also folder1 und folder2 befinden sich im selben Verzeichnis...
@MagBen: Ich bin nicht ganz sicher was du meinst... Also wenn ich genau deinen Code so übernehme und nur den ausführe bekomme ich das: C:\LegacyApp\folder2 allerdings ist der Ordner eigentlich auf dem Desktop!?
Killigen hat geschrieben: Ich bin nicht ganz sicher was du meinst... Also wenn ich genau deinen Code so übernehme und nur den ausführe bekomme ich das: C:\LegacyApp\folder2 allerdings ist der Ordner eigentlich auf dem Desktop!?
Mit einer relativen Pfadangabe suchst Du die Datei relativ zum aktuellen Arbeitsverzeichnis. Wenn dann die Datei nicht gefunden wird, obwohl sie eigentlich da sein müsste, dann liegt das oftmals daran, dass das aktuelle Arbeitsverzeichnis nicht so wie gedacht ist. Deshalb ist dieser Test wohl besser als mein erster Vorschlag:
@Killigen: Du startest nur dann im Verzeichnis Deines Skripts wenn das Arbeitsverzeichnis des Aufrufers da gerade ist.
Bitte verwende die entsprechenden Funktionen aus dem `os.path`-Modul um Pfade und Pfadteile zu verarbeiten und keine ``+`` und `replace()`-Operationen auf Zeichenketten.
Zur Ausnahme: Du versuchst ``C:/Users/xyz/Desktop/Test/folder2`` als *Datei* zu öffnen, und das ist nicht erlaubt. Was sollte das auch für eine Datei sein?
@BlackJack: Ok das ist wirklich ein Fehler... Ich habe den Dateinamen vergessen anzugeben aber warum kann ich hier nicht mit replace() und + arbeiten? Die Variable ist ja vom Typ String...!? Und wenn... was sind die entsprechenden funktionen aus dem "os-path"-Modul? Könntest du mir evtl. den Code so umschreiben wie du ihn dir "richtig" vorstellst?
@Killigen: wofür gibt es eine Dokumentation? Da sind auch genug Beispiele für os.path.join drin. Und warum sollte man denn die richtigen Pfadtrenner mit replace durch falsche ersetzen wollen???
Killigen hat geschrieben:[...] warum kann ich hier nicht mit replace() und + arbeiten? Die Variable ist ja vom Typ String...!?
Semantisch sind das Pfade im Dateisystem und die sollte man dann auch mit den entsprechenden Funktionen bearbeiten. Damit bist du unabhängig vom System auf dem das Programm läuft.
Lass mal folgenden Code laufen und versuche die Ergebnisse zu verstehen (print hat Klammern, da ich mit Python 3 arbeite).