Как сохранить словарь в файл?
У меня проблема с изменением значения 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 в текстовом файле в том же формате?
Ответы
Ответ 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()