Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串引号中的字节对象获取字节对象_Python_Python 3.x_Pickle - Fatal编程技术网

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

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

我想在我的应用程序中使用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.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
。这是有意义的。我从一个正在使用的教程中获得了代码,所以我犹豫是否要对其进行太多的更改。我是否也应该对我正在腌制的东西进行编码?基本上,停止这样做;你准宗教地小跑出一些代码,而不了解它的实际功能;它不是“让它工作”的粉末,它的存在是有目的的,你需要理解它,而不是盲目地把东西包在里面。