Создать объект Python array.array из объекта cStringIO - PullRequest
1 голос
/ 23 сентября 2010

Я хочу создать array.array объект из cStringIO объекта:

    import cStringIO, array

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

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

Но я получаю следующее исключение:

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

Похоже, что array.array() проверяет type() первого аргумента, что делает его несовместимым с cStringIOStringIO в этом отношении).Есть ли способ сделать эту работу?

1 Ответ

4 голосов
/ 23 сентября 2010

Почему бы не использовать a.fromstring ()?Поскольку буфер StringIO полностью находится в памяти, нет смысла пытаться использовать файл api для чтения битов из одной области памяти в другую.

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

Если вы используете StringIO по другой причине (например,буфер памяти, или как файл ранее), то вы можете использовать функцию getvalue () StringIO, чтобы получить строковое значение.

...