Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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中处理MongoDB对象的有效方法_Python_Mongodb_Unicode_Bson - Fatal编程技术网

Python中处理MongoDB对象的有效方法

Python中处理MongoDB对象的有效方法,python,mongodb,unicode,bson,Python,Mongodb,Unicode,Bson,我试图构建一个非常简单的MongoDB提取脚本,但我偶然发现了这样一个问题:大多数键名和字符串被记录为unicode。 因此,当我试图打印一个文档时,它会显示一组键和值,如u'username':u'christian'等 我在这个数据库中的文档非常大和复杂,所以我有几个嵌套的级别 我搜索了一下,将unicode键和值转换成ASCII,但没有找到任何结果 我正试图像这样转换所有键和值 def convert2ascii: for k, v in mydict.iteritems():

我试图构建一个非常简单的MongoDB提取脚本,但我偶然发现了这样一个问题:大多数键名和字符串被记录为
unicode
。 因此,当我试图打印一个文档时,它会显示一组键和值,如
u'username':u'christian'

我在这个数据库中的文档非常大和复杂,所以我有几个嵌套的级别

我搜索了一下,将unicode键和值转换成ASCII,但没有找到任何结果

我正试图像这样转换所有键和值

def convert2ascii:
    for k, v in mydict.iteritems():
        newk = k.encode('ascii','ignore')
        mydict[newk] = mydict.pop(k)
        if isinstance(v, unicode):
            mydict[newk] = v.encode('ascii','ignore')
        elif isinstance(v, dict):
            convert2ascii(v)
        #elif isinstance(v, list): // todo
        #    convert2ascii(v)
但是我一直遇到一些未被发现的情况(比如字典列表,或者只是字符串的简单列表),并且必须将所有这些添加到该函数中,到目前为止,它相当难看


有没有关于如何简化的想法?

简单回答:
Pickle
这是一种非常快速、简单的序列化和保存任何对象的方法

import pickle

# pickle highest performance object conversion into a bytestream 
# used to pickle n unpickle (i.e. save/load)
def save(file, filename='file'):
    with open(f'{filename}.pickle', 'wb') as f:
        pickle.dump(file, f, protocol=pickle.HIGHEST_PROTOCOL)


def load(filename):
    with open(f'{filename}.pickle', 'rb') as f:
        return pickle.load(f) 
Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象

泡菜不是人类可读的

Pickle不是语言不可知论者

泡菜很慢


Pickle的缺点:

为什么您认为Unicode键是一个问题?它们不是,你绝对不应该把它们编码成任何东西。我只是想在任何地方去掉u。我不能像这样将导出的文件交付给其他部门,因为这会导致他们导入文件时出现问题。但是Mongodb的输出不是文件。如果您想要一个文件,那么就使用类似JSON的文件序列化格式。这样就不需要对任何东西进行编码了。是的,但是怎么做呢?这正是我想要的。将其简单地输出为JSON。但即使这样,由于文档的unicode格式,我也无法轻松做到。请使用内置的json库:
json.dumps(my_data)
。不需要转换任何Unicode。