2017-02-02 6 views
0

У меня есть функция, которая возвращает collections.OrderedDict(), которая является полезной нагрузкой для http post.Как написать OrderedDicts в файл и прочитать его обратно в список?

Мне нужно регистрировать автономные данные, когда сообщение HTTP не удается, поэтому я хочу написать все dicts в файл и прочитать его как список, я знаю, что могу создать список и сохранить его в списке, но нужно чтобы писать в файл и чтение обратно в список,

может кто-то пожалуйста, помогите мне решить эту проблему, пожалуйста, предложите, если есть лучшая идея для извлечения элементов Dict в виде списка

+0

Не могли бы вы сделать это, не используя файл? –

+1

'list (dictionary.items()' –

+0

Спасибо peter за ответ, запись файла обязательна, так как dicts может вырасти до десятков тысяч и сохранить список не рекомендуется :( –

ответ

0

Вы можете конвертировать список словарей на json и сохранить его в файле .json. Тогда, прочитав это будет кусок пирога.

from collections import OrderedDict 
import json 
dic = OrderedDict() 
dic['hello'] = 'what up' 
dic_2 = OrderedDict() 
dic_2['hey, second'] = 'Nothing is up' 

with open('file.json', 'w') as f: 
    dictionaries = [dic, dic_2] 
    f.write(json.dumps(dictionaries)) 
with open('file.json', 'r') as read_file: 
    loaded_dictionaries = json.loads(read_file.read()) 
    print(loaded_dictionaries[0]) 

Выходов:

{'hello': 'what up'} 

Это будет работать аккуратно, пока словарный ключ/значение любые из этих типов: dict, list, str, int, float, bool, None.

+0

Спасибо за ваш ответ, объект dict продолжает расти с течением времени, когда я в автономном режиме, я хочу сбросить файлы dicts в файл и как только я буду в сети , я хочу отправить на сервер –

+0

Всякий раз, когда вам нужно его обновить, просто откройте файл снова, прочитайте файл, чтобы получить из него список из списка, добавить в список, преобразовать список в json с помощью 'json.dumps (json.dumps) list) и записывать его в файл. – Nether

+0

Я читаю его неправильно все время, не меняя список обратно на json, теперь я читаю файл обратно в список с помощью json.loads и добавляю новый dict, а затем пишу обратно ing json.dumps, Наконец, когда мне нужно передать dict, я просто прочитал весь файл с помощью json.loads и отправлю его, ваше решение отлично работает, спасибо @Nether –

2

Используйте json для сериализации данных.

import json 
import collections 

d = collections.OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 

s = json.dumps(list(d.items())) 
print(s) 

value = json.loads(s) 
print(value) 

json сериализует объект на строку '[["a", 1], ["b", 2], ["c", 3]]'. Затем json может считывать данные обратно в объект python.

json очень распространен и используется на многих языках. Большинство веб-apis используют json, чтобы помочь сделать их приложение RESTful.

+0

спасибо за ваш ответ, dict продолжает расти с течением времени, и i нужно добавлять файл каждый раз, когда я получаю объект dict, пожалуйста, предложите, если у вас есть альтернатива –

+0

Мне нужно было бы увидеть какой-то код. Если у вас есть несколько словарей, тогда вызовите 'dict.update (other_dict)' Это объединит словари. – HashSplat