python 3中的字符数组?

时间:2016-05-10 15:03:46

标签: python arrays python-3.x

Python 2.7中,我可以像这样创建一个字符数组:

#Python 2.7 - works as expected
from array import array
x = array('c', 'test')

但在Python 3 'c'中不再是可用的类型代码。如果我想要一个字符数组,我该怎么办? 'u'类型也将被移除。

#Python 3 - raises an error
from array import array
x = array('c', 'test')
  

TypeError:不能使用str来使用类型代码'c'初始化数组

3 个答案:

答案 0 :(得分:5)

使用字节数组'b',与unicode字符串进行编码。

使用array.tobytes().decode()array.frombytes(str.encode())转换为字符串和从字符串转换。

>>> x = array('b')
>>> x.frombytes('test'.encode())
>>> x
array('b', [116, 101, 115, 116])
>>> x.tobytes()
b'test'
>>> x.tobytes().decode()
'test'

答案 1 :(得分:2)

似乎python开发人员不再支持在数组中存储字符串,因为大多数用例都会使用新的bytes interfacebytearray@MarkPerryman's solution似乎是您最好的选择,尽管您可以通过子类使.encode().decode()透明:

from array import array

class StringArray(array):
    def __new__(cls,code,start=''):
        if code != "b":
            raise TypeError("StringArray must use 'b' typecode")
        if isinstance(start,str):
            start = start.encode()
        return array.__new__(cls,code, start)

    def fromstring(self,s):
        return self.frombytes(s.encode())
    def tostring(self):
        return self.tobytes().decode()

x = StringArray('b','test')
print(x.tostring())
x.fromstring("again")
print(x.tostring())

答案 2 :(得分:0)

感谢Mark Perryman:

>>> x = array('b')
>>> x.frombytes('test'.encode())
>>> x
array('b', [116, 101, 115, 116])
>>> x.tobytes()
b'test'
>>> x.tobytes().decode()
'test'

其他:

>> x.frombytes('hellow world'.encode())
>>> x
array('b', [116, 101, 115, 116, 104, 101, 108, 108, 111, 119, 32, 119, 111, 114, 108, 100])
>>> x.tostring()
b'testhellow world'
>>> x[1]
101
>>> x[1]^=0x1
>>> x[1]
100

>> x.tobytes().decode()
'wdsthellow world'
>>> x.tobytes
<built-in method tobytes of array.array object at 0x11330b7b0>
>>> x.tobytes()
b'wdsthellow world'

确实,我最近需要从阵列列表中转换一个特殊字节, 尝试了各种方法,然后获得了新的简单方法:x[1]^=0x1,然后 可以通过array.array['b', <my bytes list>]

轻松获得数组