Как сохранить словарь в файл? - программирование
Подтвердить что ты не робот

Как сохранить словарь в файл?

У меня проблема с изменением значения dict и сохранением dict в текстовом файле (формат должен быть таким же), я хочу только изменить поле member_phone.

Мой текстовый файл имеет следующий формат:

memberID:member_name:member_email:member_phone

и я разделил текстовый файл на:

mdict={}
for line in file:
    x=line.split(':')
    a=x[0]
    b=x[1]
    c=x[2]
    d=x[3]
    e=b+':'+c+':'+d

    mdict[a]=e

Когда я пытаюсь изменить member_phone, хранящийся в d, значение изменилось не на поток,

def change(mdict,b,c,d,e):
    a=input('ID')
    if a in mdict:
        d= str(input('phone'))
        mdict[a]=b+':'+c+':'+d
    else:
        print('not')

и как сохранить dict в текстовом файле в том же формате?

4b9b3361

Ответ 1

Python имеет pickle только для такого рода вещей.

Эти функции - все, что вам нужно для сохранения и загрузки практически любого объекта:

def save_obj(obj, name ):
    with open('obj/'+ name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

def load_obj(name ):
    with open('obj/' + name + '.pkl', 'rb') as f:
        return pickle.load(f)

Эти функции предполагают, что у вас есть папка obj в текущем рабочем каталоге, которая будет использоваться для хранения объектов.

Обратите внимание, что pickle.HIGHEST_PROTOCOL - это двоичный формат, который не всегда может быть удобным, но хорош для производительности. Протокол 0 - текстовый формат.

Для сохранения наборов Python существует модуль shelve.

Ответ 2

Pickle, вероятно, лучший вариант, но если кто-нибудь задается вопросом, как сохранить и загрузить словарь в файл с помощью NumPy:

import numpy as np

# Save
dictionary = {'hello':'world'}
np.save('my_file.npy', dictionary) 

# Load
read_dictionary = np.load('my_file.npy').item()
print(read_dictionary['hello']) # displays "world"

FYI: просмотрщик файлов NPY

Ответ 3

Я не уверен, какой у вас первый вопрос, но если вы хотите сохранить словарь в файл, вы должны использовать библиотеку json. Посмотрите документацию по нагрузкам и расставьте функции.

Ответ 4

Сохраните и загрузите файл dict в файл:

def save_dict_to_file(dic):
    f = open('dict.txt','w')
    f.write(str(dic))
    f.close()

def load_dict_from_file():
    f = open('dict.txt','r')
    data=f.read()
    f.close()
    return eval(data)

Ответ 5

Мы также можем использовать модуль json в том случае, когда словари или некоторые другие данные могут быть легко сопоставлены с форматом JSON.

Сериализация данных в файл:

import json
json.dump( data, open( "file_name.json", 'w' ) )

Считать данные из файла:

import json
data = json.load( open( "file_name.json" ) )

Это решение дает много преимуществ, например, работает для Python 2.x и Python 3.x в неизменном виде, и, кроме того, данные, сохраненные в формате JSON, могут легко передаваться между различными платформами или программами. Эти данные также читаются человеком.

Ответ 6

Если вы действительно хотите сохранить словарь, я считаю, что лучшим решением является использование модуля csv Python для чтения файла. Затем вы получаете строки данных, и вы можете изменить member_phone или все, что захотите; наконец, вы можете снова использовать модуль csv, чтобы сохранить файл в том же формате как вы его открыли.

Код для чтения:

import csv

with open("my_input_file.txt", "r") as f:
   reader = csv.reader(f, delimiter=":")
   lines = list(reader)

Код для записи:

with open("my_output_file.txt", "w") as f:
   writer = csv.writer(f, delimiter=":")
   writer.writerows(lines)

Конечно, вам нужно адаптировать вашу функцию change():

def change(lines):
    a = input('ID')
    for line in lines:
      if line[0] == a:
        d=str(input("phone"))
        line[3]=d
        break
    else:
      print "not"

Ответ 7

Для словаря строк, такого как тот, с которым вы имеете дело, это можно сделать, используя только встроенные возможности обработки текста Python.

(Обратите внимание, что это не будет работать, если значения являются чем-то другим.)

with open('members.txt') as file:
    mdict={}
    for line in file:
        a, b, c, d = line.strip().split(':')
        mdict[a] = b + ':' + c + ':' + d

a = input('ID: ')
if a not in mdict:
    print('ID {} not found'.format(a))
else:
    b, c, d = mdict[a].split(':')
    d = input('phone: ')
    mdict[a] = b + ':' + c + ':' + d  # update entry
    with open('members.txt', 'w') as file:  # rewrite file
        for id, values in mdict.items():
            file.write(':'.join([id] + values.split(':')) + '\n')

Ответ 8

Я не приурочил его, но ставлю h5 быстрее, чем рассол; размер файла с сжатием почти наверняка меньше.

import deepdish as dd
dd.io.save(filename, {'dict1': dict1, 'dict2': dict2}, compression=('blosc', 9))

Ответ 9

Быстрое и грязное решение: преобразовать dict в строку и сохранить в файл, например:

#dict could be anything:

savedict = open('savedict001.txt', 'w')
savedict.write(str(dict))
savedict.close()