cvs Datein

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.
Antworten
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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]
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hallo,

schau dir mal das csv modul an.

Grüße
Gerrit
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sttrader hat geschrieben:

Code: Alles auswählen

for row in reader:
    print row
Nur mal als Denkansatz:

Code: Alles auswählen

last_row = []
for row in reader:
    print last_row
    print row
    last_row = row
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Hallo ihr alle

Das Problem habe ich nun Gelöst bekommen
es verrichtet seine Arbeit sauber und vor allem
Sau schnell :lol:

LG ST
Gabelmensch
User
Beiträge: 79
Registriert: Montag 12. Oktober 2009, 11:50

Zeig dochmal wie du es gemacht hast.
Antworten