Hallo,
ich bin ein ziemlicher Neuling und suche eine Möglichkeit um mehrere Anordner nacheinander zu öffnen und in jedem geöffneten ordner aus jeweils der gleichen zeile einer Datei werte einzulesen. Die Ordner sind dabei jeweils mit "Ordner_n" n=1,2,3,....9 gekennzeichnet.
Habt ihr dazu eine Lösung? Würde mich sehr über Hilfe freuen.
Liebe Grüße
Funktion um mehrere Ordner nacheinander zu öffnen
-
- User
- Beiträge: 30
- Registriert: Mittwoch 6. November 2019, 13:42
Hallo, unten ist mein Versuch. Zur Erklärung die Variable ordner beinhaltet den Pfad zu der jeweiligen Datei. Der Ordnername ändert sich jeweils nur an der Stelle i, eben beispielsweise Ordner_1, Ordner_2 usw.
Nach meinem Verständnis müssten alle Dateien eingelesen und in der shell geprintet werden.
Nach meinem Verständnis müssten alle Dateien eingelesen und in der shell geprintet werden.
Code: Alles auswählen
ordner = "Eingabe/Ordner_i/Text.dat"
if __name__ == "__main__":
counter = 0
for i in xrange(1,9):
f = open('ordner','r')
print(f.read())
@BatsillasD: bei Dir fehlen noch die Grundlagen, was literale Strings sind und was Variablen. In Strings werden nicht auf magische Weise Teile, die wie Variablennamen aussehen, durch den Wert dieser Variablen ersetzt. Das muß man explizit durch Stringformatierung machen.
`counter` wird nirgends benutzt und Dateien die man öffnet, sollte man auch wieder schließen, am besten mit Hilfe des with-Statements. Bei Text-Dateien immer explizit ein Encoding angeben. Die Einrückungen stimmen noch nicht.
`counter` wird nirgends benutzt und Dateien die man öffnet, sollte man auch wieder schließen, am besten mit Hilfe des with-Statements. Bei Text-Dateien immer explizit ein Encoding angeben. Die Einrückungen stimmen noch nicht.
Beispiel der Stringformatierung:
Ausgabe:
Eingabe/Ordner_1/Text.dat
Eingabe/Ordner_2/Text.dat
Eingabe/Ordner_3/Text.dat
Eingabe/Ordner_4/Text.dat
Eingabe/Ordner_5/Text.dat
Eingabe/Ordner_6/Text.dat
Eingabe/Ordner_7/Text.dat
Eingabe/Ordner_8/Text.dat
Code: Alles auswählen
for n in range(1,9):
print(f"Eingabe/Ordner_{n}/Text.dat")
Ausgabe:
Eingabe/Ordner_1/Text.dat
Eingabe/Ordner_2/Text.dat
Eingabe/Ordner_3/Text.dat
Eingabe/Ordner_4/Text.dat
Eingabe/Ordner_5/Text.dat
Eingabe/Ordner_6/Text.dat
Eingabe/Ordner_7/Text.dat
Eingabe/Ordner_8/Text.dat
Der TE arbeitet mit Python 2.7, das hat er frueher schon mal erwaehnt. Damit geht der format-String nicht, und es muss
heissen.
Code: Alles auswählen
print("Eingabe/Ordner_{}/Text.dat".format(i))
-
- User
- Beiträge: 30
- Registriert: Mittwoch 6. November 2019, 13:42
Vielen Dank für Eure bisherige Hilfe, mein Programm sieht aktuell so aus:
Nun gibt es dabei offensichtlich irgendwelche Probleme, die ich nicht wirklich identifizieren kann. Das sieht in der Shell so aus:
Code: Alles auswählen
ordner = "Eingabe/Ordner_i/Text.dat"
if __name__ == "__main__":
for i in xrange(1,9):
f = open('ordner','r')
print('Eingabe/Ordner_i/Text.dat'.format(i))
Könnt Ihr erkennen wo der Feher liegt?Traceback (most recent call last):
File "plot.py", line 72, in <module>
f = open('ordner','r')
IOError: [Errno 2] No such file or directory: 'ordner'
@BatsillasD: ich wiederhole mich gerne: bei Dir fehlen noch die Grundlagen, was literale Strings sind und was Variablen. In Strings werden nicht auf magische Weise Teile, die wie Variablennamen aussehen, durch den Wert dieser Variablen ersetzt.
-
- User
- Beiträge: 30
- Registriert: Mittwoch 6. November 2019, 13:42
und wo kann man das so nachlesen, dass man es als Anfänger versteht? Irgendwie habe ich das Gefühl, dass Sie immer nur betonen was der Fragende nicht kann. Im besten Fall sagen Sie dann noch was falsch ist. Das hilft wirklich niemandem, der irgendwas lernen will. Gebe mir viel Mühe, aber als Neueinsteiger ist das nunmal nicht leicht.Sirius3 hat geschrieben: Freitag 15. November 2019, 13:00 @BatsillasD: ich wiederhole mich gerne: bei Dir fehlen noch die Grundlagen, was literale Strings sind und was Variablen. In Strings werden nicht auf magische Weise Teile, die wie Variablennamen aussehen, durch den Wert dieser Variablen ersetzt.
Nachlesen kannst du in der Python Dokumentation diese ist allerdings für Version 3.x. Aber String mit der .format() Methode sind dort auch thematisiert. Wenn du daraus auch nicht schlau wirst, dann google einfach "Python .format()" und du wirst genügend Beispiele finden.
- __blackjack__
- User
- Beiträge: 14051
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@BatsillasD: In der Python-Dokumentation gibt es ein Grundlagentutorial.
Das man Bezeichner und Zeichenkettenliterale nicht einfach so durcheinanderwerfen kann, weil das zwei verschiedene Dinge sind, sollte einem aber auch der gesunde Menschenverstand sagen. Das irgend etwas innerhalb einer literalen Zeichenkette das es auch ausserhalb als Bezeichner gibt, nicht auf magische Weise in der Zeichenkette durch Wert ersetzt wird, der an den Bezeichner gebunden ist, sollte man sich auch denken/erarbeiten können. Denn das würde ja bedeuten, dass man dann in den Zeichenketten nichts mehr verwenden kann was ausserhalb auch als Name existiert, oder dass der Rechner die Gedanken des Programmierers lesen können muss, wann der denn gerne Namen ersetzt haben möchte und wann nicht. Aus "Eingabe/Ordner_i/Text.dat" würde dann ja bei i=1 ein "E1ngabe/Ordner_1/Text.dat" oder Du müsstest mal erklären können warum der Rechner wissen sollte das er das eine "i" ersetzen sollte und das andere nicht.
Auch bei der `format()`-Methode so wie Du sie nach dem `open()` stehen hast, wird das so nicht funktionieren, denn da stellt sich doch die gleiche Frage: Woher soll der Rechner/Python/die `format()`-Methode hier wissen *was* in der Zeichenkette durch den Wert von `i` ersetzt werden soll? Rechner sind dumm. Wirklich saudumm. Die machen genau was man ihnen sagt, nicht was man eigentlich meinte. Ein Mensch der ein bisschen mitdenkt weiss natürlich sofort was Du da erreichen willst. Rechner denken aber nicht mit. Die arbeiten stur das ab was da steht, nach sehr starren Regeln. Ob das am Ende ein sinnvolles Ergebnis bringt oder nicht.
Neben dem/einem Tutorial wird man dann auch nicht umhin kommen in der Dokumentation nachzulesen was die einzelnen Syntaxkonstrukte bewirken, und Funktionen und Methoden machen. Zum Beispiel die Regeln was `format()` mit der Zeichenkette und den übergebenen Werten anstellt.
Und das wird seine Zeit dauern. Das schafft man sich nicht mal eben in 10 Minuten drauf, da sollte man schon ein paar Tage für einplanen, und da dann wirklich dran arbeiten. Also nicht nur unter dem Blickwinkel, dass man möglichst wenig Zeit damit verbringen möchte und nur Sachen lernen möchte die man unmittelbar für die Aufgabe braucht. Denn a) weiss man das ja noch gar nicht, was man braucht und was nicht, und b) muss man den gesamten Grundlagen”baukasten” kennen, um dann gezielt die Teile und Werkzeuge auswählen zu können die man für die Lösung braucht. Die Grunddatentypen und deren Operationen/Methoden und die Kontrollstrukturen sind Voraussetzung um sinnvoll Programme schreiben zu können.
Das man Bezeichner und Zeichenkettenliterale nicht einfach so durcheinanderwerfen kann, weil das zwei verschiedene Dinge sind, sollte einem aber auch der gesunde Menschenverstand sagen. Das irgend etwas innerhalb einer literalen Zeichenkette das es auch ausserhalb als Bezeichner gibt, nicht auf magische Weise in der Zeichenkette durch Wert ersetzt wird, der an den Bezeichner gebunden ist, sollte man sich auch denken/erarbeiten können. Denn das würde ja bedeuten, dass man dann in den Zeichenketten nichts mehr verwenden kann was ausserhalb auch als Name existiert, oder dass der Rechner die Gedanken des Programmierers lesen können muss, wann der denn gerne Namen ersetzt haben möchte und wann nicht. Aus "Eingabe/Ordner_i/Text.dat" würde dann ja bei i=1 ein "E1ngabe/Ordner_1/Text.dat" oder Du müsstest mal erklären können warum der Rechner wissen sollte das er das eine "i" ersetzen sollte und das andere nicht.
Auch bei der `format()`-Methode so wie Du sie nach dem `open()` stehen hast, wird das so nicht funktionieren, denn da stellt sich doch die gleiche Frage: Woher soll der Rechner/Python/die `format()`-Methode hier wissen *was* in der Zeichenkette durch den Wert von `i` ersetzt werden soll? Rechner sind dumm. Wirklich saudumm. Die machen genau was man ihnen sagt, nicht was man eigentlich meinte. Ein Mensch der ein bisschen mitdenkt weiss natürlich sofort was Du da erreichen willst. Rechner denken aber nicht mit. Die arbeiten stur das ab was da steht, nach sehr starren Regeln. Ob das am Ende ein sinnvolles Ergebnis bringt oder nicht.
Neben dem/einem Tutorial wird man dann auch nicht umhin kommen in der Dokumentation nachzulesen was die einzelnen Syntaxkonstrukte bewirken, und Funktionen und Methoden machen. Zum Beispiel die Regeln was `format()` mit der Zeichenkette und den übergebenen Werten anstellt.
Und das wird seine Zeit dauern. Das schafft man sich nicht mal eben in 10 Minuten drauf, da sollte man schon ein paar Tage für einplanen, und da dann wirklich dran arbeiten. Also nicht nur unter dem Blickwinkel, dass man möglichst wenig Zeit damit verbringen möchte und nur Sachen lernen möchte die man unmittelbar für die Aufgabe braucht. Denn a) weiss man das ja noch gar nicht, was man braucht und was nicht, und b) muss man den gesamten Grundlagen”baukasten” kennen, um dann gezielt die Teile und Werkzeuge auswählen zu können die man für die Lösung braucht. Die Grunddatentypen und deren Operationen/Methoden und die Kontrollstrukturen sind Voraussetzung um sinnvoll Programme schreiben zu können.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari