Erstellen Python array.array Objekt von cStringIO Object
Frage
Ich will ein array.array
Objekt aus einem cStringIO
Objekt erstellen:
import cStringIO, array
s = """
<several lines of text>
"""
f = cStringIO.StringIO(s)
a = array.array('c')
a.fromfile(f, len(s))
Aber ich bekomme die folgende Ausnahme:
Traceback (most recent call last): File "./myfile.py", line 22, in <module> a.fromfile(f, len(s)) TypeError: arg1 must be open file
Es scheint, wie array.array()
ist die type()
des ersten Arguments Kontrolle, die es unvereinbar mit cStringIO
(und StringIO
für diese Angelegenheit) macht. Gibt es eine Möglichkeit, diese Arbeit zu machen?
Lösung
Warum verwenden a.fromstring nicht ()? Da der StringIO Puffer vollständig im Speicher vorhanden ist, gibt es keinen Vorteil zu versuchen, eine Datei api zu verwenden, um die Bits von einem Speicherplatz zu einem anderen zu lesen.
a = array.array('c')
a.fromstring(s)
Wenn Sie StringIO aus einem anderen Grunde verwenden (als Speicherpuffer oder als Datei früher), dann können Sie StringIO die getvalue () Funktion verwenden, um den Zeichenfolge-Wert zu erhalten.