Hi,
weiss jemand wie ich ein array als datei abspeichern kann und danach in einer neuen sitzung wieder aufrufen kann? Ich hab das schon mir pickle probiert, aber das unterstützt keine arrays.
Vielen Dank,
Grüsse Mamba
Array abspoeichern
Hoi,
array? Was meinst Du? Wenn ich von Deinen vorherigen Threads raten darf, ndarray von numpy? In dem Fall: numpy.savetxt() und numpy.loadtxt() aber auch my_ndarray.dump(file) - zum eigentlichen picklen.
HTH
Christian
array? Was meinst Du? Wenn ich von Deinen vorherigen Threads raten darf, ndarray von numpy? In dem Fall: numpy.savetxt() und numpy.loadtxt() aber auch my_ndarray.dump(file) - zum eigentlichen picklen.
HTH
Christian
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wenn pickle das nicht kann, bezweifel ich, dass shelve mitspielt.
Um welche Arrays geht es denn? Numpy?
Wenn ja, solltest du Funktionen zum speichern finden. AFAIR ``savetxt``
Um welche Arrays geht es denn? Numpy?
Wenn ja, solltest du Funktionen zum speichern finden. AFAIR ``savetxt``
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
shelve erzeugt gepicklete dict-ähnliche Objekte - das ist nicht dasselbe wie ein array picklen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Also ich kann das bei mir:DanielMamba hat geschrieben:Ich hab das schon mir pickle probiert, aber das unterstützt keine arrays.
Code: Alles auswählen
In [38]: array.array("l", range(5))
Out[38]: array('l', [0, 1, 2, 3, 4])
In [39]: a = array.array("l", range(5))
In [40]: a
Out[40]: array('l', [0, 1, 2, 3, 4])
In [41]: import pickle
In [42]: pickle.dumps(a)
Out[42]: "carray\narray\np0\n(S'l'\np1\nS'\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x
00\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x04\\x00\\x00\\x00'\np2\ntp3\nRp4\n.
"
In [43]: stored = pickle.dumps(a)
In [44]: b = pickle.loads(stored)
In [45]: b
Out[45]: array('l', [0, 1, 2, 3, 4])
-
- User
- Beiträge: 28
- Registriert: Dienstag 27. Januar 2009, 14:20
ja genau, das funktioniert bei mir auch...allerdings ist es bei der nächsten Sitzung nicht mehr aufrufbar. Muss man es also in eine Datei schrieben?Hyperion hat geschrieben:Also ich kann das bei mir:DanielMamba hat geschrieben:Ich hab das schon mir pickle probiert, aber das unterstützt keine arrays.Edit: Ok, ich dachte an das array-Modul!Code: Alles auswählen
In [38]: array.array("l", range(5)) Out[38]: array('l', [0, 1, 2, 3, 4]) In [39]: a = array.array("l", range(5)) In [40]: a Out[40]: array('l', [0, 1, 2, 3, 4]) In [41]: import pickle In [42]: pickle.dumps(a) Out[42]: "carray\narray\np0\n(S'l'\np1\nS'\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x 00\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x04\\x00\\x00\\x00'\np2\ntp3\nRp4\n. " In [43]: stored = pickle.dumps(a) In [44]: b = pickle.loads(stored) In [45]: b Out[45]: array('l', [0, 1, 2, 3, 4])
Gruss Mamba
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja natürlich! So funktioniert nun einmal Persistenz - Du musst schon selber ein File-Object bereitstellen und dann die dump()-Funktion nutzen (nicht dumps - das "s" steht ja grad für "string"). Ansonsten erzeugst Du eben einen String, der mit dem Interpreter stirbtDanielMamba hat geschrieben: ja genau, das funktioniert bei mir auch...allerdings ist es bei der nächsten Sitzung nicht mehr aufrufbar. Muss man es also in eine Datei schrieben?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nur das JSON laut Doku arrays nativ nicht serialisieren kann
Code: Alles auswählen
In [47]: a = array.array("l", range(5))
In [48]: json.dumps(a)
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (41, 0))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\Programme\Python26\Scripts\<ipython console> in <module>()
C:\Programme\Python26\lib\json\__init__.pyc in dumps(obj, skipkeys, ensure_ascii
, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)
228 cls is None and indent is None and separators is None and
229 encoding == 'utf-8' and default is None and not kw):
--> 230 return _default_encoder.encode(obj)
231 if cls is None:
232 cls = JSONEncoder
C:\Programme\Python26\lib\json\encoder.pyc in encode(self, o)
365 # exceptions aren't as detailed. The list call should be roughl
y
366 # equivalent to the PySequence_Fast that ''.join() would do.
--> 367 chunks = list(self.iterencode(o))
368 return ''.join(chunks)
369
C:\Programme\Python26\lib\json\encoder.pyc in _iterencode(self, o, markers)
315 raise ValueError("Circular reference detected")
316 markers[markerid] = o
--> 317 for chunk in self._iterencode_default(o, markers):
318 yield chunk
319 if markers is not None:
C:\Programme\Python26\lib\json\encoder.pyc in _iterencode_default(self, o, marke
rs)
321
322 def _iterencode_default(self, o, markers=None):
--> 323 newobj = self.default(o)
324 return self._iterencode(newobj, markers)
325
C:\Programme\Python26\lib\json\encoder.pyc in default(self, o)
342
343 """
--> 344 raise TypeError(repr(o) + " is not JSON serializable")
345
346 def encode(self, o):
TypeError: array('l', [0, 1, 2, 3, 4]) is not JSON serializable
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Stimmt. Jetzt sehe ich das auchlutz.horn hat geschrieben:Ich habe keine Ahnung von numpy, aber was macht eigentlich array.tostring()? Reicht das nicht für die Serialisierung?
array stellt also selber eine Serialisierung zur Verfügung. Also könnte man auch locker diese nutzen.
Allerdings hat der OP ja noch nicht explizit gesagt, was er nun nutzt! (also ob array aus numpy oder aus dem array-Modul der Standard-Lib)