Seite 1 von 1

pop und del

Verfasst: Freitag 12. Juni 2015, 00:33
von Bob Billsworth
Hallo Zusammen :D

Code: Alles auswählen

i = 0
while i <= h:  #h = 106
    name = open("idaxp_"+str(i),"rb")
    idax = pickle.load(name)
    name.close()
    j = 0
    while j <= len(idax)-1:
        if idax[j][1][:+2] == "08" or idax[j][1][:+2] == "09" or idax[j][1][:+2] == "10" ... :
            idax[j][1] = idax[j][1][:-7]
            idax[j][2] = round(float(idax[j][2]),2)
            idax[j][3] = round(float(idax[j][3]),2)
            idax[j].append((round(((idax[j][2]+idax[j][3])/2),2)))
            idax[j].pop(2)
            idax[j].pop(2)
        else:
            del idax[j]
        j += 1
    name = open("idaxpF_"+str(i), "bw")
    pickle.dump(idax, name)
    name.close()
    i += 1
Folgendes wird ausgegeben, wenn ich (for item in idax: print(item)) eingebe:

['20140101', '00:25:28:832', '9552.14', '9552.18']
['20140101', '00:55:28:905', '9552.136', '9552.183']
['20140101', '01:25:28:876', '9552.143', '9552.186']
['20140101', '01:55:28:945', '9552.134', '9552.179']
['20140101', '02:25:28:856', '9552.138', '9552.177']
['20140101', '02:55:28:852', '9552.136', '9552.176']
['20140101', '03:25:30:977', '9552.139', '9552.178']
['20140101', '03:55:31:054', '9552.139', '9552.185']
['20140101', '04:10:30:987', '9552.139', '9552.186']
['20140101', '04:40:31:048', '9552.136', '9552.183']
['20140101', '05:10:31:057', '9552.139', '9552.178']
['20140101', '05:40:33:098', '9552.138', '9552.186']
['20140101', '06:10:33:090', '9552.14', '9552.186']
['20140101', '06:40:35:139', '9552.141', '9552.177']
['20140101', '07:10:35:140', '9552.137', '9552.176']
['20140101', '07:40:37:167', '9552.134', '9552.175']

['20140101', '08:10:39:139', '9552.144', '9552.172']
['20140101', '08:25', 9552.15]
['20140101', '08:40', 9552.17]
['20140101', '08:55', 9552.16]
['20140101', '09:10', 9552.16]
['20140101', '09:25', 9552.17]
['20140101', '09:40', 9552.17]
['20140101', '09:55', 9552.16]
['20140101', '10:10', 9552.15]
['20140101', '10:25', 9552.16]
...

1. Die kursiv angezeigten Listen dürften eigentlich gar nicht mehr existieren. idax.pop(j) funktioniert auch nicht. Bei beiden Varianten erhalte ich keine Fehlermeldung. Die kursiven Listen werden dennoch nicht gelöscht.

2. Die fett angezeigte Liste ("08") müsste eigentlich wie die unten stehenden Listen formatiert sein.

Vielen Dank im Voraus für Eure Antworten.

Re: pop und del

Verfasst: Freitag 12. Juni 2015, 07:14
von Sirius3
@Bob Billsworth: Du löschst den Eintrag idax[j] und zählst gleichzeitig j hoch. Das ist bestimmt nicht so beabsichtigt. Statt while-Schleifen solltest Du for-Schleifen nehmen und statt über den Index zu iterieren gleich über die Liste selbst. Statt Elemente aus einer Liste löschen solltest Du eine neue Liste erstellen. Und soll tatsächlich mit gerundeten Werten gerechnet werden? Normalerweise rundet man am Schluß und nur am Schluß.

Code: Alles auswählen

for i in range(h + 1):
    with open("idaxp_%d" % i, "rb") as inp:
        idax = pickle.load(inp)
    result = []
    for date, time, value1, value2 in idax:
        if time.startswith(('08','09','10')):
            result.append([
                date,
                time[:7],
                round(0.5*(float(value1) + float(value2)), 2),
            ])
    with open("idaxpF_%d" % i, "wb") as outp:
        pickle.dump(result, outp)
EDIT: übrigens ist das pickle-Format nur für kurzzeitige Python-interne Aufgaben gedacht. Hier würde sich csv als Format geradezu aufdrängen.

Re: pop und del

Verfasst: Freitag 12. Juni 2015, 07:54
von sparrow
Sirius3s Beispiel ist übrigens auch noch viel hübscher zu lesen.

Re: pop und del

Verfasst: Freitag 12. Juni 2015, 10:17
von Bob Billsworth
Vielen Dank für Eure Antworten. :D

Mit dem (for i in range) und dem (for date, time, ...) tun sich für mich neue Welten auf. Ich komme mir wie ein Neandertaler vor. An das csv-Modul hatte ich bereits gedacht; habe mich allerdings noch nicht getraut. Um den Output überprüfen zu können, sollte ich mich jedoch heran wagen.