Seite 1 von 1

listen übergeben [] -> ()

Verfasst: Montag 28. April 2008, 09:53
von sea-live
servus hab da mal wieder ein problem

warum bekomm ich kein ergebniss in die listen


Code: Alles auswählen

import csv
# Einlesen der daten  csv )
data = [{'Volume': '1285500', 'Adj Close': '9.84', 'High': '10.18', 'Low': '9.70', 'Date': '2008-04-25', 'Close': '9.84', 'Open': '9.74'},
 {'Volume': '1121700', 'Adj Close': '9.67', 'High': '9.70', 'Low': '9.36', 'Date': '2008-04-24', 'Close': '9.67', 'Open': '9.45'},
 {'Volume': '1513700', 'Adj Close': '9.41', 'High': '9.45', 'Low': '8.95', 'Date': '2008-04-23', 'Close': '9.41', 'Open': '8.98'},
 {'Volume': '601800', 'Adj Close': '9.03', 'High': '9.09', 'Low': '8.87', 'Date': '2008-04-22', 'Close': '9.03', 'Open': '8.90'},
 {'Volume': '481100', 'Adj Close': '8.87', 'High': '8.99', 'Low': '8.82', 'Date': '2008-04-21', 'Close': '8.87', 'Open': '8.95'},
 {'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'},
 {'Volume': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'},
 {'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}]
cord_open=()
cord_low=()
cord_high=()
cord_close=()
linien_key={'Open':cord_open,'Low':cord_low,'High':cord_high,'Close':cord_close}      

for key, value in linien_key.iteritems():
    liste=[]
    tmp=()
    print key
    for i in range(len(data)):
        tmp = (i,round(float(data[i][key]),2))
        liste.append(tmp)
    print liste    
    value = list(tuple(liste))
    #print value

print 'Ergebniss'
print cord_low

print cord_close

Verfasst: Montag 28. April 2008, 10:12
von Hyperion
Also zum einen sind tuple ja nicht veränderbar, zum anderen sehe ich (bei Deinem leicht verworrenem Code) nicht, dass Du irgend etwas in chord_low usw. reinschreibst (wobei das ja auch nicht ginge ;-) )

Also was erwartest Du genau?

Verfasst: Montag 28. April 2008, 10:20
von BlackJack
@sea-live: Für die innere ``for``-Schleife würde ich die `enumerate()`-Funktion verwenden.

Was soll denn ``list(tuple(liste))`` bewirken?

Die letzte Zuweisung in der äusseren Schleife bindet einfach den Namen `value` an die eine Kopie von `liste`. Das hat keinen Effekt auf das Objekt was vorher an den Namen gebunden war, und noch weniger einen Effekt auf irgend welche Objekte, die noch eine Referenz auf das vorherige Objekt halten. Wenn Du `liste` in das Dictionary `linien_key` eintragen möchtest, dann musst Du das explizit tun.

`tmp` in Zeile 20 an ein leeres Tupel zu binden ist überflüssig.

Verfasst: Montag 28. April 2008, 10:24
von sea-live
also einzel geht es

dann muss halt der code etwas länger werden 4x das gleiche

Code: Alles auswählen

liste=[]
tmp=()
for i in range(len(data)):
    tmp=(i,round(float(data[i]['Open']),2))
    liste.append(tmp)
    
cord_open=tuple(liste)

Verfasst: Montag 28. April 2008, 10:38
von BlackJack
Wenn Du 4x das gleiche machst, dann nimm eine Schleife. Wenn es dann "nicht geht" setz Dich doch bitte mal damit auseinander wie in Python "Variablen" bzw. das binden von Namen an Objekte funktioniert. Das sind absolute Grundlagen.

Ausserdem wäre es günstiger die äussere Schleife über die Daten laufen zu lassen, wenn man alles in einem Dictionary sammelt und die innere Schleife über die Schlüssel. So braucht man dann nicht einmal die kompletten Daten auf einmal in den Speicher laden, sondern benötigt immer nur einen Datensatz.

Code: Alles auswählen

def process(keys, data):
    result = dict.fromkeys(keys, list())
    for row_number, row in enumerate(data):
        for key in keys:
            result[key].append((row_number, round(float(row[key]), 2)))
    return result


def main():
    data = [{'Volume': '1285500', 'Adj Close': '9.84', 'High': '10.18', 'Low': '9.70', 'Date': '2008-04-25', 'Close': '9.84', 'Open': '9.74'}, 
    {'Volume': '1121700', 'Adj Close': '9.67', 'High': '9.70', 'Low': '9.36', 'Date': '2008-04-24', 'Close': '9.67', 'Open': '9.45'}, 
    {'Volume': '1513700', 'Adj Close': '9.41', 'High': '9.45', 'Low': '8.95', 'Date': '2008-04-23', 'Close': '9.41', 'Open': '8.98'}, 
    {'Volume': '601800', 'Adj Close': '9.03', 'High': '9.09', 'Low': '8.87', 'Date': '2008-04-22', 'Close': '9.03', 'Open': '8.90'}, 
    {'Volume': '481100', 'Adj Close': '8.87', 'High': '8.99', 'Low': '8.82', 'Date': '2008-04-21', 'Close': '8.87', 'Open': '8.95'}, 
    {'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'}, 
    {'Volume': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'}, 
    {'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}] 
    
    linien_key = process(('Open', 'Low', 'High', 'Close'), data)
    print 'Ergebniss'
    print linien_key['Low']
    print linien_key['Close']

Verfasst: Montag 28. April 2008, 11:55
von sea-live
danke für die netten antworten
ich werde mir daraus was basteln

die daten werden aus einer datei csv komplett eingelesen
und dann in ein plot und grit übergeben

deswegen muss ein koorinaten(nummerierung) und spalte(key'open')
aufschlüsselung erfolgen

BlackJack dein Beispiel ergibt nicht die gewünschte einzel aufschlüsselung

aber ein durchlauf im process kann ja die gewünschten daten liefern und muss dann nur noch 4x aufgerufen werden
ERGEBNISS

Code: Alles auswählen

import csv
pfad = "C:\\boerse\\"
listenname = 'tecdax'
dateiname = 'aix.de'

def progress(key,data):
    liste=[]
    tmp=()
    for i in range(len(data)):
        tmp = (i,round(float(data[i][key]),2))
        liste.append(tmp)
    return liste

def main():
    # Einlesen der daten  csv )
    """
    file_in =open("%s%s\\%s.csv"%(pfad,listenname,dateiname), 'rb')
    reader =csv.DictReader(file_in)
    data = list(reader)
    file_in.close()
    """
    data = [{'Volume': '1285500', 'Adj Close': '9.84', 'High': '10.18', 'Low': '9.70', 'Date': '2008-04-25', 'Close': '9.84', 'Open': '9.74'},
     {'Volume': '1121700', 'Adj Close': '9.67', 'High': '9.70', 'Low': '9.36', 'Date': '2008-04-24', 'Close': '9.67', 'Open': '9.45'},
     {'Volume': '1513700', 'Adj Close': '9.41', 'High': '9.45', 'Low': '8.95', 'Date': '2008-04-23', 'Close': '9.41', 'Open': '8.98'},
     {'Volume': '601800', 'Adj Close': '9.03', 'High': '9.09', 'Low': '8.87', 'Date': '2008-04-22', 'Close': '9.03', 'Open': '8.90'},
     {'Volume': '481100', 'Adj Close': '8.87', 'High': '8.99', 'Low': '8.82', 'Date': '2008-04-21', 'Close': '8.87', 'Open': '8.95'},
     {'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'},
     {'Volume': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'},
     {'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}]
    #"""
    cord_open = tuple(progress('Open',data))
    cord_low = tuple(progress('Low',data))
    cord_high = tuple(progress('High',data))
    cord_close = tuple(progress('Close',data))

    print 'Ergebniss high'
    print cord_high

    print 'Ergebniss close'
    print cord_close

main()

Verfasst: Montag 28. April 2008, 12:50
von BlackJack
Mein Beispiel liefert in einem Durchgang das gleiche was Deins in vier Durchgängen macht. Ich gebe ein Dictionary zurück, wo alle vier Ergebnisse drin stecken.

Verfasst: Montag 28. April 2008, 14:22
von sea-live
um eine linie zu zeichnen brauch ich aber die einzelnen tupels

es läuft und ich bin dir dankbar für den tip