Question

Je veux créer un objet array.array d'un objet cStringIO:

    import cStringIO, array

    s = """
    <several lines of text>
    """

    f = cStringIO.StringIO(s)
    a = array.array('c')
    a.fromfile(f, len(s))

Mais je reçois l'exception suivante:

Traceback (most recent call last):  
  File "./myfile.py", line 22, in <module>  
    a.fromfile(f, len(s))  
TypeError: arg1 must be open file

Il semble que array.array() vérifie la type() du premier argument, ce qui le rend incompatible avec cStringIO (et StringIO pour cette matière). Est-il possible de faire ce travail?

Était-ce utile?

La solution

Pourquoi ne pas utiliser a.fromstring ()? Etant donné que le tampon StringIO est entièrement en mémoire, il n'y a aucun avantage à essayer d'utiliser un api de fichier pour lire les bits d'un emplacement de mémoire à l'autre.

a = array.array('c')
a.fromstring(s)

Si vous utilisez StringIO pour une autre raison (comme une mémoire tampon, ou un fichier plus tôt), vous pouvez utiliser la fonction de getvalue de StringIO () pour obtenir la valeur de chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top