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

2024-09-22 16:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但是我经常遇到一些未被发现的情况(比如字典列表,或者仅仅是字符串的简单列表),并且必须将所有这些添加到该函数中,到目前为止,它相当难看

有什么办法让这更简单吗


Tags: 字符串文档脚本列表mongodbasciiunicodemydict
1条回答
网友
1楼 · 发布于 2024-09-22 16:27:53

简单的回答: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 is unsafe because it constructs arbitrary Python objects by invoking arbitrary functions.

Pickle isn’t human readable

Pickle isn’t language-agnostic

Pickle is slow

Pickle的缺点:HERE

相关问题 更多 >