Seite 1 von 1

Datei auslesen und in neue Datei übertragen

Verfasst: Dienstag 26. November 2019, 16:26
von MRO5494
Hallo Liebe Leute,

ich bin neu hier und Python-Anfänger. Im Rahmen meiner Masterarbeit soll ich aus mehreren Dateien (Dateiendung .out, bzw .arc) bestimmte Daten auslesen und in ein neues File schreiben.

Ist es dabei möglich ein Skript zu schreiben, bei dem man zunächst eine Datei geöffnet ,dann vorzugeben in welcher Zeile und Spalte sich der gewünschte Wert befindet und diesen direkt in das Neue File zu übertragen?

Mit freundlichen Grüßen

MRO5494

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Dienstag 26. November 2019, 16:29
von __deets__
Die Dateiendung .out oder .arc sagt nicht wirklich etwas darueber aus, WAS das ist. Du wirst da also noch ein bisschen weiter ausholen muessen um zu beschreiben, was genau das fuer Formate sind. Dann kann man auch Hinweise dazu geben, *wie* sich das loesen laesst. Allgemein kann man natuerlich sowas programmieren, wenn man ein Format hat, das Daten irgendwie in Tabellenform vorhaelt, und diese Dateien lesen und schreiben kann.

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 15:19
von MRO5494
Sagen wir ich habe folgenden Aufbau:

1 x y z
2 Drehzahl 1 1 1
3 Lambda 1 2 1
4 Hubraum 1 1 1

Nun möchte ich ein Skript haben, dass sagt lese mir Zeile 3 den Wert für Lambda in Spalte y aus und schreibe es in eine neue Datei "Auswertung.txt" oder Ähnliches.

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 15:25
von sparrow
Grundsätzlich geht das. Allerdings musst du die Datei schon selbst interpretieren.
Du kannst die Datei Zeile für Zeile durchgehen, den Inhalt nach Leerzeichen trennen (split) und so an die entsprechenden "Spalten" kommen.
Wo genau die Schwierigkeiten liegen, kommt dann auf den tatsächlichen Fall an. Können zum Beispiel mehrere Zeilen mit "Drehzahl" vorkommen und wie unterscheidet man die Zugehörigkeit, etc.

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 15:32
von __deets__
Dann benutzt du das csv-Modul um die Daten einzulesen und das entsprechende Element rauszuloesen. Das kannst du dann wieder mit dem csv-Modul schreiben.

Code: Alles auswählen

import io
import csv

DATA = """1 x y z
2 Drehzahl 1 1 1
3 Lambda 1 2 1
4 Hubraum 1 1 1"""

ROW, COL = 2, 1


def main():
    with io.StringIO(DATA) as inf:
        reader = csv.reader(inf, delimiter=" ")
        value = list(reader)[ROW][COL]
        print(value)

if __name__ == '__main__':
    main()

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 15:40
von MRO5494
Okay, Vielen Dank Ihr 2!
Da ich noch am Anfang mit Python bin, verstehe ich noch nicht so viel davon. Könnt ihr mir empfehlen, nach was ich da googeln soll. Ich habe auch schon oft vom dem package Numpy gelesen. Geht das in die richtige Richtung?

Mit freundlichen Grüßen
MRO5494

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 15:45
von __deets__
Nein, das Paket numpy bezieht sich auf numerische Matrizen. Eine Alternative zu csv das ich verwandt habe ist das Pandas-Modul, das kannst/solltest du dir anschauen. Ich bin allerdings etwas verwirrt, ob das was du da als Format angegeben hast jetzt etwas ist, das du dir selbst ausgedacht hast. Oder ist das wirklich das verwandte Format? Die Formulierung "Sagen wir ich habe folgenden Aufbau" suggeriert das ist was selbst ausgedachtes.

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 16:09
von MRO5494
Ich habe die Datei mal als Bild abgebildet wie sie aussieht.

Bild

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 16:16
von MRO5494
Bild

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Mittwoch 27. November 2019, 16:32
von __deets__
Ok, das sieht ja schon ziemlich so aus wie vorher angegeben. Dafuer wuerde ich pandas benutzen.

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Donnerstag 28. November 2019, 11:07
von einfachTobi
Wenn ich die Daten richtig interpretiere hast du 3 Dimensionen:
  • Messzyklus 0 bis n
  • Zylinder 1 bis 4
  • jeweils Messwerte für rpm, bore, stroke, conn_rod, cyl_disp, ...
Das ist in Pandas machbar, aber nicht sonderlich gut. Dafür gibt es aber xarray. Die Idee basiert auf Numpy und Pandas. Ist weitestgehend konvertierbar zu Pandas DataFrames. Auf jeden Fall einen Blick wert.
Da der Input sehr strukturiert ist, kann als Quick'n'dirty-Methode auch einfach die Datei stumpf mit den Standardfunktionen eingelesen und dann aussortiert und umgespeichert werden. Das ist jedoch nicht der schöne und korrekte Weg.

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Freitag 6. Dezember 2019, 17:04
von MRO5494
Hallo Leute,

Ich habe mich jetzt ein wenig eingearbeitet und arbeite aktuell mit pandas. Nun möchte ich Daten in eine csv-Datei schreiben. Aber leider klappt es nicht wie ich möchte.

Mein Code sieht wie folgt aus:
IP = pd.read_csv(file_path, header=2, delim_whitespace=True, low_memory=False)
print (IP['sp_ip_01'][2])
result = IP['sp_ip_01'][2]
result.to_csv ('IP.csv')

Jetzt bekomme ich folgenden Fehler: AttributeError: 'str' object has no attribute 'to_csv'

Was kann ich tun? Die packages pandas und csv sind importiert.

Vielen Dank im Voraus!

Euer MRO

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Freitag 6. Dezember 2019, 22:11
von sparrow
"result" ist vom Typ "str", also eine Zeichenkette. Und die hat keine Funktion "to_csv" - das bedeutet der Fehler.
Wie kommst du darauf, dass die eine haben sollte?

Re: Datei auslesen und in neue Datei übertragen

Verfasst: Montag 9. Dezember 2019, 13:55
von MRO5494
Ich weiß nicht wie ich darauf komme, sry. Ich habe das Problem nun mit dem csv-writer gelöst.

Vielen Dank!