我正在构建一个例程来处理磁盘缓冲区以进行取证。我最好使用python字符串或array()类型吗?我的第一个想法是使用字符串,但我试图消除unicode问题,所以也许数组('c')更好?
答案 0 :(得分:9)
使用最自然的(字符串)编写代码,找出它是否太慢然后改进它。
在大多数情况下,只要您将自己限制为索引和切片访问,就可以将数组用作str
的插入式替换。两者都是固定长度的。两者都应该具有相同的内存要求。如果需要更改缓冲区,则数组是可变的。数组可以直接从文件中读取,因此阅读时不会涉及速度惩罚。
但我不明白如何通过使用数组来避免Unicode问题。 str
只是一个字节数组,对字符串的编码一无所知。
我认为您提到的“磁盘缓冲区”可能相当大,因此您可能会考虑使用mmap
:
内存映射文件对象的行为类似于字符串和文件对象。然而,与普通的字符串对象不同,这些是可变的。您可以在大多数需要字符串的地方使用mmap对象;例如,您可以使用re模块搜索内存映射文件。由于它们是可变的,您可以通过执行obj [index] ='a'来更改单个字符,或者通过分配给切片来更改子字符串:obj [i1:i2] ='...'。您还可以从当前文件位置开始读取和写入数据,并通过文件搜索()到不同的位置。
答案 1 :(得分:6)
如果你需要改变缓冲区(你不清楚是否这样做,因为你使用模糊术语“处理”),array
可能会更好,因为str
是不可变的。但是,在Python 2.6或更高版本中,bytearray
可以是两个世界中最好的 - 可变和丰富的方法和也可用于正则表达式。< / p>
对于只读操作,字符串的边缘超过array
(多亏了更多的方法,加上正则表达式等附加内容,可用于它们),如果你遇到旧的Python版本,那么就不能使用bytearray
。在任何一种情况下,Unicode都不是问题(在Python 2中;在Python 3中,绝对转到bytearray
! - )。