1

我想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就此而言)不兼容。有什么办法可以使这项工作?

4

1 回答 1

4

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

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

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

于 2010-09-23T14:28:41.463 回答