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

时间:2018-04-25 20:37:03

标签: python mongodb unicode bson

我正在尝试构建一个非常简单的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)

但是我一直在遇到一些未被发现的场景(比如字典列表,或者只是一个简单的字符串列表),并且必须将所有这些添加到该函数中,到现在它相当丑陋。

关于如何使这更简单的任何想法?

1 个答案:

答案 0 :(得分:-1)

简单回答: 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与语言无关

     

泡椒很慢

对Pickle的解释:HERE