Seite 1 von 1
cvs Datein
Verfasst: Dienstag 12. Januar 2010, 11:57
von sttrader
Hallo an alle
Ich habe mal eine kleine Frage wie kann ich z.b eine
CVS Datei Zeilen weise einlesen und die spalten
und spalten werte miteinander vergleichen?
----------------------------------------------------------------------------
Date,Open,High,Low,Close,Volume,Adj Close
2010-01-08,6028.62,6053.04,5972.24,6037.61,31735200,6037.61
2010-01-07,6016.80,6037.57,5961.25,6019.36,30059600,6019.36
-----------------------------------------------------------------------------
Also ich möchte denn unteren "Close" wert einlessen, und mit dem oberen "Open" vergleichen.
Wenn der obere "Open" wert grösser ist prüffen ob der "Low" wert
gleich oder kleiner dem unterem "Close" wert ist.
Ich wäre über eure Hilfe wirklich sehr dankbar
LG ST
[/img]
Verfasst: Dienstag 12. Januar 2010, 12:02
von gkuhl
Hallo,
schau dir mal das
csv modul an.
Grüße
Gerrit
Verfasst: Dienstag 12. Januar 2010, 12:14
von sttrader
Hallo
Das habe ich schon das cvs file auslesen bekomme ich ja hin aber die spalten werte so wie beschrieben zu vergleichen raffe ich nicht bzw
ich finde nichts dazu?
LG ST
Verfasst: Dienstag 12. Januar 2010, 12:26
von /me
sttrader hat geschrieben:Das habe ich schon das cvs file auslesen bekomme ich ja hin aber die spalten werte so wie beschrieben zu vergleichen raffe ich nicht bzw
ich finde nichts dazu?
Zuerst einmal bringen wir die Terminologie auf einen einheitlichen Stand. Unter CVS versteht man in der IT das
Concurrent Versions System. Was du meinst ist CSV und das steht für
Comma Separated Values - auch wenn gerne mal andere Trenner als das Komma genommen werden.
Zu deiner Fragestellung habe ich noch eine Verständnisfrage. Hat die Datei immer nur zwei Zeilen? Wenn nicht, was ist dann für dich der "untere Close-Wert" und der "obere Open-Wert"?
Beziehst du dich eventuell einfach immer auf zwei aufeinanderfolgende Zeilen? In dem Fall benötigst du für den Vergleich natürlich die aktuelle und die vorhergehende Zeile. Dein Programmcode muss also eine Möglichkeit vorsehen, sich die Daten der letzten Zeile zu merken damit sie dann mit den Daten der aktuellen Zeile verglichen werden können.
Verfasst: Dienstag 12. Januar 2010, 12:39
von sttrader
Hallo
Nein es sind keine 2 Zeilen teilweise sind es mehr als 1000 Zeilen
diese file ist sogar 6000 Zeilen groß es muss Komplet von unten
nach oben durch Arbeiten.
LG ST
Verfasst: Dienstag 12. Januar 2010, 12:44
von cofi
Das beantwortet aber nicht die Frage, was mit den Sonderfaellen Anfang bzw Ende passieren soll.
/me hat dir ja schon verraten, wie der Algorithmus (wenn man das ueberhaupt so nennen kann) aussehen muss.
Verfasst: Dienstag 12. Januar 2010, 12:53
von sttrader
Hallo Cofi
Denn unteren close wert wollte ich jeweils mit der darüber liegenden
Open wert vergleichen wenn der darüber liegene Open wert grösser ist wen ja dann schauen ob der Low wert den Vortages Close ereicht.
Das ganze in einer Schleife von unten nach oben wobei die Abbruch Bedingung das aktelle datum wäre.
LG ST
Verfasst: Dienstag 12. Januar 2010, 14:59
von /me
sttrader hat geschrieben:Denn unteren close wert wollte ich jeweils mit der darüber liegenden Open wert vergleichen wenn der darüber liegene Open wert grösser ist wen ja dann schauen ob der Low wert den Vortages Close ereicht.
Das ganze in einer Schleife von unten nach oben wobei die Abbruch Bedingung das aktelle datum wäre.
Das klingt jetzt schon nach gutem Pseudocode. Jetzt formulier das noch in Python und schon läuft es.
Wenn du Schwierigkeiten hast, dann zeig uns deinen bisherigen Ansatz und wir schauen mal, wo wir die da unter die Arme greifen können.
Verfasst: Dienstag 12. Januar 2010, 15:31
von sttrader
Hallo /me
In Python bin ich zwar wirklich anfänger.
Das habe ich bis jetzt:
Code: Alles auswählen
import csv
#----------------------------------------------
# Variablen
Abruch = "0"
Close = "0"
Open = "0"
High = "0"
Low = "0"
Treffer = "0"
Verlierer = "0"
#----------------------------------------------
#Funktion
reader = csv.reader(open("table.csv", "rb"))
for row in reader:
print row
#----------------------------------------------
#Ausgabe
print"#######################################################################"
print Treffer
print Verlierer
Verfasst: Dienstag 12. Januar 2010, 15:41
von cofi
Du solltest den
DictReader nutzen, der erspart dir schonmal die unsaeglichen Zeilen 3 - 12 (die koennte man aber auch anders vermeiden).
Die Doku zu csv ist recht spaerlich mit Beispielen, deshalb ist
http://www.thehazeltree.org/pymotw/csv/index.html sehr lesenswert.
Das wichtigste des Algorithmus' hast du allerdings vergessen: Dir den letzten Wert zu merken.
Verfasst: Dienstag 12. Januar 2010, 16:02
von sttrader
cofi hat geschrieben:Du solltest den
DictReader nutzen, der erspart dir schonmal die unsaeglichen Zeilen 3 - 12 (die koennte man aber auch anders vermeiden).
Die Doku zu csv ist recht spaerlich mit Beispielen, deshalb ist
http://www.thehazeltree.org/pymotw/csv/index.html sehr lesenswert.
Das wichtigste des Algorithmus' hast du allerdings vergessen: Dir den letzten Wert zu merken.
Da liegt ja mein Problem ich habe keine idee wie ich es lösen kann,
da fehlt mir einfachdie Übung.
LG ST
Verfasst: Dienstag 12. Januar 2010, 16:14
von cofi
Achtung Pseudocode (sort of).
Code: Alles auswählen
previous_day = {
"open" : 0,
"close" : 0
}
for line in csv:
if line["open"] < previous_day["open"]:
if line["close"] >= previous_day["close"]:
print "Hooray"
Da du immernoch nicht beschrieben hast, wie der Spezialfall des ersten
Durchgangs behandelt werden soll, hab ich die werte einfach mal 0 gesetzt.
Verfasst: Dienstag 12. Januar 2010, 16:17
von /me
sttrader hat geschrieben:
Nur mal als Denkansatz:
Code: Alles auswählen
last_row = []
for row in reader:
print last_row
print row
last_row = row
Verfasst: Dienstag 19. Januar 2010, 02:33
von sttrader
Hallo ihr alle
Das Problem habe ich nun Gelöst bekommen
es verrichtet seine Arbeit sauber und vor allem
Sau schnell
LG ST
Verfasst: Dienstag 19. Januar 2010, 10:09
von Gabelmensch
Zeig dochmal wie du es gemacht hast.