speicherung v. mehrdim. Array

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
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Hast du es mit dem pickle Modul versucht?
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

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
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

@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.
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

@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.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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.
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Antworten