从cStringIO对象创建Python array.array对象

时间:2010-09-23 14:06:45

标签: python stringio

我想从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(),这使得它与cStringIO(以及StringIO不相容)。有没有办法让这项工作?

1 个答案:

答案 0 :(得分:4)

为什么不使用a.fromstring()?由于StringIO缓冲区完全在内存中,因此尝试使用文件api将位从一个内存位置读取到另一个内存位置没有任何好处。

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

如果您出于其他原因(作为内存缓冲区或之前的文件)使用StringIO,则可以使用StringIO的getvalue()函数来获取字符串值。