Python 3中如何对字符串使用memoryview?解决类型错误问题
解决memoryview无法接收字符串的问题
你遇到的这个报错很典型——Python 3里的str是Unicode字符序列,它没有内存缓冲区接口,而memoryview专门用来操作字节级别的内存缓冲区,所以直接传字符串肯定会报错。
解决方法很简单,只需要把字符串转换成字节类对象就行,这里有两种常用方式:
转换成不可变的
bytes对象:用字符串的encode()方法指定编码(通常用utf-8),这样就能得到memoryview能处理的字节缓冲区:mv = memoryview("this is a string".encode('utf-8')) # 现在可以正常操作mv了,比如截取部分字节 print(mv[5:7].tobytes()) # 输出 b'is'转换成可变的
bytearray对象:如果需要通过memoryview修改底层内容,就用bytearray来转换,它是可修改的字节数组:mv = memoryview(bytearray("this is a string", 'utf-8')) # 修改第一个字节(把小写t改成大写T) mv[0] = ord('T') print(mv.tobytes()) # 输出 b'This is a string'
简单总结下:memoryview只认字节类型的缓冲区,Unicode字符串必须先编码成字节序列才能被它处理,选bytes还是bytearray取决于你是否需要修改底层内容。
内容的提问来源于stack exchange,提问作者pgmank
相关产品推荐
相关产品推荐

