这对于缓冲区操作更有效:python strings或array()

vy3*_*y32 3 python arrays performance

我正在构建一个例程来处理磁盘缓冲区以进行取证.我最好使用python字符串或array()类型吗?我的第一个想法是使用字符串,但我试图消除unicode问题,所以也许数组('c')更好?

Tor*_*rek 9

使用最自然的(字符串)编写代码,找出它是否太慢然后改进它.

str在大多数情况下,只要您将自己限制为索引和切片访问,就可以将数组用作插入式替换.两者都是固定长度的.两者都应该具有相同的内存要求.如果需要更改缓冲区,则数组是可变的.数组可以直接从文件中读取,因此阅读时不会涉及速度惩罚.

但是,我不明白如何通过使用数组来避免Unicode问题.str只是一个字节数组,并不知道有关字符串编码的任何信息.

我假设您提到的"磁盘缓冲区"可能相当大,因此您可能会考虑使用mmap:

内存映射文件对象的行为类似于字符串和文件对象.然而,与普通的字符串对象不同,这些是可变的.您可以在大多数需要字符串的地方使用mmap对象; 例如,您可以使用re模块搜索内存映射文件.由于它们是可变的,您可以通过执行obj [index] ='a'来更改单个字符,或者通过分配给切片来更改子字符串:obj [i1:i2] ='...'.您还可以从当前文件位置开始读取和写入数据,并通过文件搜索()到不同的位置.


Ale*_*lli 6

如果你需要就地更改缓冲区(不清楚你是否这样做,因为你使用模糊术语"处理"),arrays可能会更好,因为strings是不可变的.然而,在Python 2.6或更高版本中,bytearrays可以是两个世界中最好的 - 可变丰富的方法,也可用于正则表达式.

对于只读操作,array如果您遇到旧的Python版本而无法使用,则字符串具有优势(由于更多的方法,以及诸如正则表达式之类的额外内容,可用于它们)bytearray.在任何一种情况下,Unicode都不是问题(在Python 2中;在Python 3中,绝对适用bytearray! - ).