Daten auslesen

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.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Daten auslesen

Beitragvon lastesel » Freitag 13. Juni 2008, 11:44

Hallo, ich habe ein Problem mit dem auslesen von Daten aus einer Messdatei die in etwa so aussieht:

Spalte1:Spate2:Spalte3:...
Datum Uhrzeit Zahlenwert ...

Bei Datum steht das Datum in einer Spalte, bei Uhrzeit die Uhrzeit in der Form: 11:20:40.
Ich will nun die Daten mit Datum und Uhrzeit auslesen. D.h. Nur ganz Bestimmte Columns aus den Messdaten. Die Uhrzeit sollte Idealerweise auf Stunden reduziert werden.

Vielen Dank,
lastesel
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Freitag 13. Juni 2008, 11:50

und was genau ist jetzt die Frage? Was hast Du denn schon?

Was mich irritiert: warum hast Du in der ersten Zeile den Doppelpunkt als Trennzeichen, in der zweiten aber nicht? Ist es jetzt der Doppelpunkt oder ist es ein anderes Zeichen? Wenn es der Doppelpunkt ist waere das natuerlich sehr ungluecklich, da Deine Uhrzeit ja auch mit Doppelpunkt getrennt ist.

Kannst Du nicht mal ein paar Zeile mit realen Werten posten? So ist das irgendwie arg verwirrend, finde ich.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Beitragvon lastesel » Freitag 13. Juni 2008, 12:02

Die Daten schicke ich gleich noch.
Die Frage ist A: Wie kann ich von der Datei nur die von Benötigten Spalten einlesen (mir würde schon ein allg. Befehl reichen dann kann ich selber weiter schauen)

und B: Wie kann ich die Spalte Uhrzeit von hh:mm:ss auf nur hh reduzieren.
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Freitag 13. Juni 2008, 12:10

kommt halt arg drauf an, wie die Daten wirklich genau aussehen und getrennt sind. Im einfachsten Fall reicht da aber ja ein einfacher Stringsplit vollkommen aus. Erst einer mit dem Trennzeichen der Spalten, und dann nur noch auf die Uhrzeit angewendet ein Split auf den Doppelpunkt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 13. Juni 2008, 13:08

Hallo Lastesel!

Code: Alles auswählen

>>> s = """2004-01-20;20:30:00;5000
... 2005-03-30;14:15:00;6000"""
>>> for line in s.splitlines():
...     date, time, value = line.split(";")
...     print date
...     print time, time.split(":")[0]
...     print value
...     
2004-01-20
20:30:00 20
5000
2005-03-30
14:15:00 14
6000
>>>

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Beitragvon lastesel » Freitag 13. Juni 2008, 13:15

Danke, jetzt hab ich nur noch das Problem die Zeilen auseinanderzufummeln, aber ich komm gerade nicht an die Daten ran --> nacher dann
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Freitag 13. Juni 2008, 13:22

lastesel hat geschrieben:Danke, jetzt hab ich nur noch das Problem die Zeilen auseinanderzufummeln, aber ich komm gerade nicht an die Daten ran --> nacher dann

Bei einem File Object:

Code: Alles auswählen

for zeile in datei.readlines():
    print zeile

Oder was meintest Du?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 13. Juni 2008, 13:24

lastesel hat geschrieben:jetzt hab ich nur noch das Problem die Zeilen auseinanderzufummeln

Hallo Lastesel!

Code: Alles auswählen

>>> f = file(r"daten.txt", "rU")
>>> for line in f:
...     line = line.rstrip()
...     if line:
...         print line
...     
2004-01-20;20:30:00;5000
2005-03-30;14:15:00;6000
>>> f.close()
>>>

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Beitragvon lastesel » Freitag 13. Juni 2008, 13:39

Oh, da hab ich gerade Müll geschrieben, ich meinte natürlich die Spalten, klar. Wie läuft das denn bei Spalten die durch Leerzeichen Getrennt sind?
Tut mir Leid, für die vielen Fragen, aber ich bin blutiger Programmieranfänger...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 13. Juni 2008, 13:41

lastesel hat geschrieben:Wie läuft das denn bei Spalten die durch Leerzeichen Getrennt sind?


Auch mit ``split()``: http://docs.python.org/lib/string-methods.html#l2h-262

mfg
Gerold
:-)
Zuletzt geändert von gerold am Freitag 13. Juni 2008, 13:41, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Freitag 13. Juni 2008, 13:41

Code: Alles auswählen

date, time, value = line.split(" ")
lunar

Beitragvon lunar » Freitag 13. Juni 2008, 14:47

Man munkelt, dass man dafür auch das ``csv``-Modul mit einem eigene Dialekt nutzen könnte ;) Das hätte die imho angenehmere API ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 13. Juni 2008, 23:37

lunar hat geschrieben:Das hätte die imho angenehmere API ;)

Wobei ich zugegebenermaßen ``csv`` nicht so sonderlich gelungen finde. Das ist mir etwas zu Low-Level und ich muss oft die Daten nochmal umwandeln, damit ich auf sie via Spaltenname zugreifen kann. Auch Unicode ist nicht so die Sache von ``csv`` gewesen, wenn ich mich richtig erinnere.

Das es Dialekte unterstützt und Quotings respektiert wohl die praktischte Sache an dem ganzen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Beitragvon lastesel » Dienstag 17. Juni 2008, 12:27

Bin jetzt so weit das ich den loadtxt() Befehl verwende. Das Problem ist jetzt nur noch die ersten 2 Spalten auszulesen. Die erste ist das Datum in der Form DD.MM.YYYY die Zweite die Uhrzeit in der Form hh:mm:ss. Wie kann ich dies machen? In den Syntax von loadtxt kann man ja so was wie converters={0:datestr2num) schreiben. Das bringt aber nicht den gewünschten Erfolg.
Lastesl
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Dienstag 17. Juni 2008, 12:34

hm, was an dem was oben steht klappt denn nicht? Das mit 'split' gilt doch nachwievor und waere ne einfach funktionierende Loesung.

Ohne dass Du ein Stueck Code postest ist es auch schwierig nachzuvollziehen, was Du da jetzt gemacht hast.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder