Créer Python array.array objet de cStringIO Objet
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?
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