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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top