【问题标题】:MMAP, "TypeError: 'str' does not support the buffer interface" | PythonMMAP, "TypeError: 'str' 不支持缓冲区接口" | Python
【发布时间】:2015-05-07 11:16:38
【问题描述】:
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' does not support the buffer interface”,这是为什么,我该如何解决这个问题?

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

谢谢!

【问题讨论】:

    标签: python-3.x mmap


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-09
      • 2023-03-10
      • 2011-07-25
      • 1970-01-01
      • 2016-11-21
      • 2016-08-20
      相关资源
      最近更新 更多