Python 从字符串引号中的字节对象获取字节对象
我想在我的应用程序中使用Whoosh,并遵循了2011年编写的教程 当我尝试取消勾选此块中的数据时:Python 从字符串引号中的字节对象获取字节对象,python,python-3.x,pickle,Python,Python 3.x,Pickle,我想在我的应用程序中使用Whoosh,并遵循了2011年编写的教程 当我尝试取消勾选此块中的数据时: def results_to_instances(request, results): instances = [] for r in results: cls = pickle.loads('{0}'.format(r.get('cls'))) id = r.get('id') instance = request.db.quer
def results_to_instances(request, results):
instances = []
for r in results:
cls = pickle.loads('{0}'.format(r.get('cls')))
id = r.get('id')
instance = request.db.query(cls).get(id)
instances.append(instance)
return instances
def first_index(self, writer):
oid = u'{0}'.format(self.id)
cls = u'{0}'.format(pickle.dumps(self.__class__))
attributes = []
for attr in self.__whoosh_value__.split(','):
if getattr(self, attr) is not None:
attributes.append(str(getattr(self, attr)))
value = u' '.join(attributes)
writer.add_document(id=oid, cls=cls, value=value)
我从pickle.loads()命令中得到一个错误:
当我检查'{0}.format(r.get('cls'))
返回的内容时,它是str类型,但值是“b'foo'”
如何从字符串中提取字节对象?编码它只会返回b“b'foo'”
这些值在该块中进行了pickle处理:
def results_to_instances(request, results):
instances = []
for r in results:
cls = pickle.loads('{0}'.format(r.get('cls')))
id = r.get('id')
instance = request.db.query(cls).get(id)
instances.append(instance)
return instances
def first_index(self, writer):
oid = u'{0}'.format(self.id)
cls = u'{0}'.format(pickle.dumps(self.__class__))
attributes = []
for attr in self.__whoosh_value__.split(','):
if getattr(self, attr) is not None:
attributes.append(str(getattr(self, attr)))
value = u' '.join(attributes)
writer.add_document(id=oid, cls=cls, value=value)
因此,如果有办法在根目录下修复它,那就更好了。只需使用
r.get('cls')
。首先,用'{0}.format()
将字节
包装成str
,这根本不是您想要的。当您包装pickle.dumps
(立即将有用的字节转换为无用的格式化版本)时也是如此。基本上,您对'{0}.format()
的所有使用都没有意义,因为当您试图处理原始数据时,它们会产生str
。只需使用r.get('cls')
。首先,用'{0}.format()
将字节
包装成str
,这根本不是您想要的。当您包装pickle.dumps
(立即将有用的字节转换为无用的格式化版本)时也是如此。基本上,您对'{0}.format()
的所有使用都毫无意义,因为当您试图处理原始数据时,它们会产生str
。难道'{0}'
没有什么作用吗?完整结果的一个示例是b'\x80\x03cserver.models.models\ntext\nq\x00.
快速尝试,我得到了相同的错误。虽然r.get('cls')
返回b'foo'
,但它仍然是str类型。这是什么意思?@Niel:因为你在腌制它时也有同样的错误。您使用了格式
,将字节
转换为str
。所有{0}。格式(x)
都是字符串化x
(在绝大多数情况下它相当于str(x)
),但是pickle是一种二进制数据格式,不需要转换成str
。这是有意义的。我从一个正在使用的教程中获得了代码,所以我犹豫是否要对其进行太多的更改。我是否也应该对我正在腌制的东西进行编码?基本上,停止这样做;你准宗教地小跑出一些代码,而不了解它的实际功能;“让它工作”不是火药,它的存在是有目的的,你需要理解它,而不是盲目地把东西包在里面。'{0}'
不是有目的的吗?完整结果的一个示例是b'\x80\x03cserver.models.models\ntext\nq\x00.
快速尝试,我得到了相同的错误。虽然r.get('cls')
返回b'foo'
,但它仍然是str类型。这是什么意思?@Niel:因为你在腌制它时也有同样的错误。您使用了格式
,将字节
转换为str
。所有{0}。格式(x)
都是字符串化x
(在绝大多数情况下它相当于str(x)
),但是pickle是一种二进制数据格式,不需要转换成str
。这是有意义的。我从一个正在使用的教程中获得了代码,所以我犹豫是否要对其进行太多的更改。我是否也应该对我正在腌制的东西进行编码?基本上,停止这样做;你准宗教地小跑出一些代码,而不了解它的实际功能;它不是“让它工作”的粉末,它的存在是有目的的,你需要理解它,而不是盲目地把东西包在里面。