Эффективный способ работы с объектами MongoDB в Python - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать очень простой скрипт извлечения MongoDB, но я наткнулся на эту проблему с большинством имен ключей и строк, записываемых как unicode.Итак, когда я пытаюсь просто напечатать документ, он выходит с набором ключей и значений, подобных этому u'username':u'christian' и т. Д.

И мои документы в этой базе данных довольно большие и сложные, поэтому у меня есть несколько вложенныхуровни.

Я немного искал, чтобы сделать это преобразование из юникод-ключей и значений в 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 голосов
/ 25 апреля 2018

Простой ответ: 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объекты, вызывая произвольные функции.

Рассол не читается человеком

Рассол не зависит от языка

Рассол медленный

Недостатки Обращены к рассолу: ЗДЕСЬ

...