Array of characters in python 3?
Use an array of bytes 'b', with encoding to and from a unicode string.
Convert to and from a string using array.tobytes().decode()
and array.frombytes(str.encode())
.
>>> x = array('b')>>> x.frombytes('test'.encode())>>> xarray('b', [116, 101, 115, 116])>>> x.tobytes()b'test'>>> x.tobytes().decode()'test'
It seems that the python devs are not longer supporting storing strings in arrays since most of the use cases would use the new bytes
interface or bytearray
. @MarkPerryman's solution seems to be your best bet although you could make the .encode()
and .decode()
transparent with a subclass:
from array import arrayclass 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())
Addition to the answer of Mark Perryman:
>> x.frombytes('hellow world'.encode())>>> xarray('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'
Exactly, I need to convert a special byte from my array list recently,have tried various methods, then get the new simple method:x[1]^=0x1
, and could get a array easily via array.array['b', <my bytes list>]