MMAP,“TypeError:'str'不支持缓冲区接口”|蟒蛇

时间:2015-05-07 11:16:38

标签: python-3.x mmap

f = open('C:\Python33\File.doc')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if (s.find("blabla")) != -1:
    print("True")

当我运行以下代码时,我收到错误“TypeError:'str'不支持缓冲区接口”,为什么会这样,我该怎么做才能解决这个问题?

我已经在网上搜索了答案,一个常见的结果是我使用Python 3而不是Python 2,他们用它来处理数据类型。但我还没有找到直接答案。

谢谢!

1 个答案:

答案 0 :(得分:4)

str是unicode代码点,它们不支持缓冲区接口(这基本上意味着对它们下面的内存的原始访问)。通常,您需要使用str.encode将它们转换为bytes,或者在这种情况下,您可以通过添加b前缀来使用字节文字而不是字面文字。< / p>

if s.find(b'blabla') != -1:
    ...

What Every Programmer Needs To Know About Unicode可以很好地解释为什么需要使用encode来获取字节。这就是为什么Python str没有提供缓冲区接口的原因 - 你需要在它知道应该在哪个字节之前明确告诉它编码。