Seite 1 von 1

Lesen und Schreiben einer Textdatei

Verfasst: Mittwoch 23. September 2020, 20:50
von panasonic18
Hallo zusammen,

ich bin relativ neu im Python-Programmieren und komme bei meinem Problem nicht mehr weiter. Folgendes Problem habe ich:

Ich habe Ergebnisdateien in unterschiedlichen Dateipfäden. Mich interessiert jeweils nur ein Wert je Ergebisdatei. Zwei Dateien müssen je Pfad eingelesen werden und dann (als x,y-Werte für einen Plot) in einer neuen Datei (Ausgabe.dat) gespeichert werden.


Mein Code für einen Dateipfad habe ich bereits erstellt:

Code: Alles auswählen


InputFile1="Dateipfad1/Datei1.dat"
InputFile2="Dateipfad1/Datei2.dat"

with open (InputFile1,"r") as rf1:
	with open (InputFile2, "r") as rf2: 
		with open ("Ausgabe.dat","w") as wf: 
			data1 = rf1.readlines()[10]
			data2 = rf2.readlines()[25]
			wf.write("Variable1\n" + data1)
			wf.write("Variable2\n" + data2)
			

Problematischer wirds hierbei mit dem lesen aus mehreren Dateipfäden. Also für Dateipfad2,3,4 usw.. Meine Idee ist eine For-Schleife, allerdings hakt es bei der Implementierung. Vielleicht kann mir ja hier jemand weiterhelfen.

Viele Grüße

Re: Lesen und Schreiben einer Textdatei

Verfasst: Mittwoch 23. September 2020, 21:16
von Sirius3
Das einzige, was für jede Eingabedatei gleich ist, ist die Ausgabedatei, also ersteinmal umschreiben.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.

Code: Alles auswählen

InputFile1="Dateipfad1/Datei1.dat"
InputFile2="Dateipfad1/Datei2.dat"

with open ("Ausgabe.dat","w") as wf: 
    with open (InputFile1,"r") as rf1:
        data1 = rf1.readlines()[10]
        wf.write("Variable1\n" + data1)
    with open (InputFile2, "r") as rf2:
        data2 = rf2.readlines()[25]
        wf.write("Variable2\n" + data2)
Pro Datei hast Du einen Dateinamen und eine Zeilennummer, Du brauchst also eine Datenstruktur, die beides zusammen speichert, mit der Du dann per for-Schleife iterieren kannst:

Code: Alles auswählen

[code=python]
input_data = [
    ("Dateipfad1/Datei1.dat", 10),
    ("Dateipfad1/Datei2.dat", 25),
]

with open ("Ausgabe.dat","w") as output:
    for index, (filename, linenumber) in enumerate(input_data, 1):
        with open(filename) as input:
            line = input.readlines()[linenumber]
            output.write(f"Variable{index}\n{line}")
Das Ausgabedateiformat ist etwas seltsam. Was sollen die Zeilen mit "Variable"? Die bieten doch gar keinen Mehrwert und machen das Lesen nur schwierig.

Re: Lesen und Schreiben einer Textdatei

Verfasst: Mittwoch 23. September 2020, 21:53
von panasonic18
Danke für deine schnelle Rückmeldung. Allerdings verstehe ich deine Ausgabedatei nicht. Also:

Code: Alles auswählen

output.write(f"Variable{index}\n{line}")
So erhalte ich doch nur einen String aus str = "Variable{index}\n{line}" oder nicht?
Ich benötige den Variablenname, da ich mir den in tecplot direkt anzeigen lassen kann. Kann man aber auch weglassen.

Edit: Okay, den output kann ich nun nachvollziehen, mit output.write(line) werden mir die jeweiligen Werte ausgegen. Mein Hauptproblem ist jedoch, dass ich diese Dateien in 50+ Ordnern/Pfaden habe. Welche jeweils nach dem Schema Dateipfad_1, Dateipfad_2 ... durchnummeriert sind.

Re: Lesen und Schreiben einer Textdatei

Verfasst: Mittwoch 23. September 2020, 22:24
von Sirius3
Wenn die Dateinamen einer Regel folgen, kannst Du sie natürlich auch generieren lassen.

Re: Lesen und Schreiben einer Textdatei

Verfasst: Mittwoch 23. September 2020, 22:34
von __blackjack__
@panasonic18: Da ist ein f vor dem Zeichenkettenliteral, dass heisst die Ausdrücke in den geschweiften Klammern werden durch die Ergebnisse davon ersetzt. In diesem Fall sind es einfach die Namen von lokalen Variablen.

Code: Alles auswählen

In [98]: greeting = "Hallo"                                                     

In [99]: receiver = "Welt"                                                      

In [100]: f"{greeting}, {receiver}!"                                            
Out[100]: 'Hallo, Welt!'