Hi, ich bin Bjarne und komme wie wahrscheinlich alle Python Anfänger mit meinem "kleinen" Programm nicht richtig voran. Deswegen hoffe ich das ihr mir weiterhelfen könnt.
Aber nun zu meinem Programm: Ich habe ein Gerät das verschieden Werte in eine Datei packt, aber diese stimmen noch nicht ganz und deswegen muss ich sie nachträglich manipulieren.
Es handelt sich um ein Gerät das unter Wasser arbeitet und in verschieden Wasserschichten die Daten von den einzelnen Sensoren in jeweils eine Datei speichert, so dass ich später einen folgenden Ordner mit Dateien habe:
Jede Datei ist gleich aufgebaut:
Und nun soll bei den letzten Beiden Werten -50 gerechnet werden und die Datei mit den neuen Werten sollte auch neu als eine andere Datei gespeichert werden. Es gibt insgesamt 13 Zeilen mit Werten (weil es 13 Geräte sind) und deswegen sind die Zeilen mit Werten am Anfang nummeriert.
Jetzt habe ich festgestellt das es doch nicht so einfach ist wie ich anfangs dacht und ich nicht genau weiß wie ich das machen soll. Ich hoffe meine Erklärung ist einigermaßen verständlich und das ihr mir weiterhelfen könnt.
So sieht übrigens mein Anfang für das Programm aus:
mehrere Dateien einlesen und bearbeiten
Bitte Code und Daten so moeglich als Text posten. Dabei die [ code][ /code]-tags nicht vergessen (Space hinter der oeffnenden Klammer weglassen).
Und so ganz habe ich noch nicht verstanden, was du da tun musst/willst. Ich sehe nur 7 (relevante) Zeilen. Und auch nur Zahlen von 1-7. Fuer das einlesen diese Daten empfiehlt sich entweder das csv Modul (schon dabei) oder Pandas. In beiden Faellen musst du aber natuerlich die erste beiden Zeilen ueberspringen.
Mit pandas zB so:
Und so ganz habe ich noch nicht verstanden, was du da tun musst/willst. Ich sehe nur 7 (relevante) Zeilen. Und auch nur Zahlen von 1-7. Fuer das einlesen diese Daten empfiehlt sich entweder das csv Modul (schon dabei) oder Pandas. In beiden Faellen musst du aber natuerlich die erste beiden Zeilen ueberspringen.
Mit pandas zB so:
Code: Alles auswählen
import pandas as pd
import io
DATA = """Pfad
Kommando
1, 2, Mar 19 2019 08:37:11, 190, 226
2, 1, Mar 19 2019 09:37:11, 226, 190"""
inf = io.StringIO(DATA) # only to emulate file!
data = pd.read_csv(inf, skiprows=2, parse_dates=[2], header=None)
print(data)
OK Danke für die schnelle Antwort und sorry das nächste mal füge ich natürlich den Code ordentlich als Text ein.
In der Datei sind nur sieben Zeilen, weil auch nur sieben meiner Geräte liefen und ich meinte das es maximal 13 Zeilen gibt weil es auch nur so viele Geräte gibt.
In der Datei sind nur sieben Zeilen, weil auch nur sieben meiner Geräte liefen und ich meinte das es maximal 13 Zeilen gibt weil es auch nur so viele Geräte gibt.
@Bjarne_03: zu Deinem Code:
Die isfile-Prüfung ist quatsch, da, falls die Datei nicht existiert, Dein Programm ein paar Zeilen später, wenn Du versuchst die Datei zu lesen, mit einem NameError aussteigt, weil Du das file-Objekt gar nicht erzeugt hast.
Wenn, dann versuch die Datei einfach zu öffnen, den Fehler mit except abzufangen und dann im Fehlerfall etwas sinnvolles machen. Wenn nichts sinnvolles möglich ist, dann gar nicht erst versuchen, eine Fehlerbehandlung durchzuführen.
Dateien öffnet man am besten mit dem with-Statement, dann wird die Datei implizit geschlossen, wenn sie nicht mehr gebraucht wird.
Beim Öffnen einer Datei immer ein encoding angeben, im Zweifel ASCII, wenn Du eh weißt, dass keine Umlaute vorkommen.
Wo kommst Du konkret nicht weiter?
In `line` hast Du ja jetzt die Zeilen einzeln, die Du nur nach Deinen Regeln bearbeiten mußt.
Die isfile-Prüfung ist quatsch, da, falls die Datei nicht existiert, Dein Programm ein paar Zeilen später, wenn Du versuchst die Datei zu lesen, mit einem NameError aussteigt, weil Du das file-Objekt gar nicht erzeugt hast.
Wenn, dann versuch die Datei einfach zu öffnen, den Fehler mit except abzufangen und dann im Fehlerfall etwas sinnvolles machen. Wenn nichts sinnvolles möglich ist, dann gar nicht erst versuchen, eine Fehlerbehandlung durchzuführen.
Dateien öffnet man am besten mit dem with-Statement, dann wird die Datei implizit geschlossen, wenn sie nicht mehr gebraucht wird.
Beim Öffnen einer Datei immer ein encoding angeben, im Zweifel ASCII, wenn Du eh weißt, dass keine Umlaute vorkommen.
Wo kommst Du konkret nicht weiter?
In `line` hast Du ja jetzt die Zeilen einzeln, die Du nur nach Deinen Regeln bearbeiten mußt.
@Bjarne_03: Pandas und csv bieten sich an, es geht aber auch quick and dirty. Das könnte dann z.B. so aussehen – sei filenames eine Liste existierender Dateien mit definiertem Inhalt:
Code: Alles auswählen
for filename in filenames:
with open(filename) as f_in, open(filename+'.out', 'w') as f_out:
for n, line in enumerate(f_in):
if n < 2:
f_out.write(line)
else:
parts = line.split(',')
parts[-2:] = [str(int(x)-50) for x in parts[-2:]]
f_out.write(','.join(parts) + '\n')