MMAP, "TypeError: 'str' does not support the buffer interface" | Python
MMAP, "TypeError: 'str' does not support the buffer interface" | Python
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,它们处理数据类型的方式。但是我还没有找到直接的答案。
谢谢!
str
s 是 unicode 代码点,它们不支持缓冲区接口(这基本上意味着对它们下面的内存的原始访问)。通常,您需要使用 str.encode
将它们转换为 bytes
,或者在这种情况下,您可以通过添加 b
前缀来使用字节文字而不是 str 文字。
if s.find(b'blabla') != -1:
...
What Every Programmer Needs To Know About Unicode 很好地解释了为什么需要使用编码来获取字节。这就是 Python 的 str
不提供缓冲区接口的原因 - 在它知道应该包含哪些字节之前,您需要明确地告诉它编码。
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,它们处理数据类型的方式。但是我还没有找到直接的答案。
谢谢!
str
s 是 unicode 代码点,它们不支持缓冲区接口(这基本上意味着对它们下面的内存的原始访问)。通常,您需要使用 str.encode
将它们转换为 bytes
,或者在这种情况下,您可以通过添加 b
前缀来使用字节文字而不是 str 文字。
if s.find(b'blabla') != -1:
...
What Every Programmer Needs To Know About Unicode 很好地解释了为什么需要使用编码来获取字节。这就是 Python 的 str
不提供缓冲区接口的原因 - 在它知道应该包含哪些字节之前,您需要明确地告诉它编码。