我想从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
不相容)。有没有办法让这项工作?
答案 0 :(得分:4)
为什么不使用a.fromstring()?由于StringIO缓冲区完全在内存中,因此尝试使用文件api将位从一个内存位置读取到另一个内存位置没有任何好处。
a = array.array('c')
a.fromstring(s)
如果您出于其他原因(作为内存缓冲区或之前的文件)使用StringIO,则可以使用StringIO的getvalue()函数来获取字符串值。