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

1 投票
1 回答
983 浏览
提问于 2025-04-16 04:30

我想从一个 cStringIO 对象创建一个 array.array 对象:

    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() 在检查第一个参数的类型,这让它和 cStringIO(还有 StringIO)不兼容。有没有办法让这个工作呢?

1 个回答

4

为什么不使用 a.fromstring() 呢?因为 StringIO 的缓冲区完全在内存中,所以用文件的方式来从一个内存位置读取数据到另一个位置是没有意义的。

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

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

撰写回答