Seite 1 von 1
speicherung v. mehrdim. Array
Verfasst: Dienstag 14. August 2007, 10:24
von Zack
Hi,
ich versuche gerade ein mehrdim. Array zu speichern. Leider kann ich das scheinbar nicht einfach so in eine Datei schreiben, da dies mit listen nicht geht. Nun habe ich versucht diesen Array in ein str() umzuwandeln. Doch wenn ich den wieder aus der Datei auslese, weiß ich nicht wie ich diesen wieder in ein Array umgewandelt bekomme. Vielleicht kann mir ja jemand weiterhelfen, oder hat schon eine schnellere/einfache Lösung.
Mit freundlichem Gruß
Zack
Verfasst: Dienstag 14. August 2007, 10:28
von BlackVivi
Hast du es mit dem pickle Modul versucht?
Verfasst: Dienstag 14. August 2007, 10:41
von tromai
Wenn du es als csv speichern willst ist z.B. das CSV-Modul für dich sicherlich interessant:
Code: Alles auswählen
from numpy import *
from csv import *
arr = zeros((5,5))
f = file("xyz.csv", 'w')
wr = writer(f)
wr.writerows(arr)
Hier gibt es schon einen Thread zum Thema:
http://www.python-forum.de/topic-11592.html
Verfasst: Dienstag 14. August 2007, 10:59
von Zack
@BlackVivi:
ja hab ich auch schon:
Code: Alles auswählen
file = open ("C://zustand.txt","w")
cPickle.dump(matrix,file)
file.close()
Code: Alles auswählen
File "C:\Python25\Lib\copy_reg.py", line 69, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle instancemethod objects
Ich poste anbei nochmal das Array um das es geht, das mit 2 Einträgen gefüttert wurde.
Code: Alles auswählen
[[(1188359999.984, 1, <bound method TimeStack._bootLoader of <time_conv4.TimeStack instance at 0x00D75D78>>, ('123', '20070829 06:00:00')), '20070829 06:00:00', '123', 'html-script'],
[(1188532799.8429999, 1, <bound method TimeStack._bootLoader of <time_conv4.TimeStack instance at 0x00D75D78>>, ('123', '20070831 06:00:00')), '20070831 06:00:00', '123', 'html-script']]
Der 0te index jedes Eintrags(diese Super-Klammer) muss leider auch in diesem vollen umfang gespeichert werden, da diese im gesamten eine ID representiert die für das sched-Modul benötigt wird.
Verfasst: Dienstag 14. August 2007, 11:18
von Zack
@tromai:
Ich hab so langsam das gefühl, dass es an den riesen Klammer-einträgen in meinem Array liegt. Denn auch die cPickle-Methode läuft reibungslos, wenn ich sie mit Normalen mehrdim. Arrays füttere. Erst bei der Klammer, in der ja nicht nur Strings oder Zahlen gespeichert sind, kommt es zu Fehlermeldungen. Ich versuche das jetzt nochmal mit der CVS-Methode, denke aber es kommt das gleiche bei raus.
Verfasst: Dienstag 14. August 2007, 11:24
von Zap
Hallo Zack!
Die von dir gezeigte Exception von Pickle sagt ja das es keine "instancemethod" pickeln kann.
D.h. matrix muss schon mit Instanzen gefüllt sein und darf nicht wie es bei dir zu sein scheint Methoden enthalten.
Vielleicht hast du nur vergessen die Methode ausführen und möchtest den Rückgabewert pickeln.
Verfasst: Dienstag 14. August 2007, 11:35
von Zack
Hi zap:
sched ist ein Modul mit dem man/frau Task zu bestimmten Zeitpunkten ausführen lassen kann. Nach so einem Eintrag eines Task, bekommt man als Rückgabe-wert diese Klammer die wie oben erwähnt als ID fungiert. Die speicher ich dann zusammen mit den anderen Informationen in mein Array, welches ich dann wiederum abspeichern wollte.
Ich denke ich werde Kapitulieren und diese Informationen einfach weglassen. Werden im endeffekt eh nicht benötigt, wie mir gerade klar wurde. Das heißt aber wiederum, dass ich das Array mühselig auseinander friemeln muss. Aber trotzdem wäre es ja interessant gewesen zu wissen, ob es möglich gewesen wäre.
Falls niemand mehr Ideen haben sollte, sag ich schon mal vielen Dank für eure Hilfe.
gruß zack
Verfasst: Donnerstag 16. August 2007, 09:15
von CM
Hoi,
HIer gibt es eine Liste von den Dingen, die pickle picklen kann. Das erklärt nochmal warum Du das Problem hattest.
Bin mir nicht 100%ig sicher, ob ich Deine Fragestellung wirklich verstanden habe, aber vielleicht hilft
das weiter?
Gruß,
Christian