从字符串引号中的bytes对象获取bytes对象

时间:2016-04-07 23:34:47

标签: python python-3.x pickle

我想在我的应用程序中使用Whoosh并遵循2011年编写的教程here

当我尝试取消该块中的数据时:

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

我从pickle.loads()命令收到错误:

TypeError: 'str' does not support the buffer interface

当我检查'{0}'.format(r.get('cls'))返回的内容时,它是str类型,但值为"b'foo'"

如何从字符串中获取bytes对象?对其进行编码只会返回b"b'foo'"

这个值在这个块中被腌制:

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)

因此,如果有办法在根处修复它,那就更好了。

1 个答案:

答案 0 :(得分:0)

只需使用r.get('cls')即可。将其'{0}'.format()包装在一起会bytes进入str,这根本不是您想要的。同样适用于包装pickle.dumps(立即将有用的bytes转换为无用的格式化版本)。基本上,您对'{0}'.format()的所有使用都没有意义,因为当您尝试使用原始数据时,它们会生成str