У меня проблема с изменением значения 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 в текстовый файл с таким же форматом?
источник
save_obj
кажется, требует, чтобы файлobj/'+ name + '.pkl
уже существовал. Я создал словарь с именемQ
, заполнил его и сделал вызов.save_obj(Q, "Qtable")
Я получил ошибку:FileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
как создать файл в первую очередь перед записью в него?wb+
для создания файла, а именно:with open('obj/'+ name + '.pkl', 'wb+')
+
в режим не повлияет на вашу проблему (andrey.s неверно). Ваша проблема звучит так, как будто это из-за одной или двух вещей. Чтобыsave_obj()
этот ответ работал, подкаталог с именем"obj"
должен уже существовать, посколькуopen()
он не будет создан автоматически. Во-вторых, первый аргумент дляsave_obj()
- это объект Python, который нужно сохранить, а не имя подкаталога (хотя не совсем понятно, что вы имели в видуQ
вsave_obj(Q, "Qtable")
вызове примера ). Вы можете создать каталог, если он еще не завершен сos.mkdir()
.Pickle - это, пожалуй, лучший вариант, но в случае, если кому-то интересно, как сохранить и загрузить словарь в файл с помощью NumPy:
К вашему сведению: просмотрщик файлов NPY
источник
type(read_dictionary)
так), а .item () в основном преобразует этот элемент в скалярный объект python, который является словарём, как здесьМы также можем использовать
json
модуль в случае, когда словари или другие данные могут быть легко сопоставлены с форматом JSON .Это решение дает много преимуществ , например, работает для Python 2.x и Python 3.x в неизменном виде, и, кроме того, данные, сохраненные в формате JSON , могут быть легко переданы между различными платформами или программами . Эти данные также читаются человеком .
источник
open
напрямую вместо контекста, созданногоwith
. Есть ли гарантия, дескриптор файла будет закрыт приjson.dump
сбое?Я не уверен, что ваш первый вопрос, но если вы хотите сохранить словарь в файл, вы должны использовать
json
библиотеку. Посмотрите документацию по нагрузкам и расставьте функции.источник
Сохраните и загрузите файл dict в файл:
источник
Для словаря строк, такого как тот, с которым вы имеете дело, это можно сделать, используя только встроенные возможности обработки текста Python.
(Обратите внимание, что это не будет работать, если значения являются чем-то другим.)
источник
split()
метод) -Какой является темой этого вопроса. Похоже, вы пытаетесь использовать его в словаре словарей, так что нет, он не будет работать с ними. Я также не ценю отрицательное голосование от людей, потому что они действительно не понимают вопрос (и таким образом контекст предоставленных ответов). Я обновлю свой ответ, чтобы при его использовании было бы уместно, поэтому, пожалуйста, отмените свое отрицательное голосование.Я бы предложил сохранить ваши данные в формате JSON, а не в формате pickle, поскольку файлы JSON удобны для чтения, что облегчает отладку, поскольку ваши данные невелики. Файлы JSON также используются другими программами для чтения и записи данных. Вы можете прочитать больше об этом здесь
Вам нужно установить модуль JSON, вы можете сделать это с помощью pip:
Это создает файл JSON с именем myfile.
Это читает и сохраняет данные myfile.json в объекте данных.
источник
Если вы действительно не хотите хранить словарь, я думаю, что лучшим решением будет использование
csv
модуля Python для чтения файла. Затем вы получаете строки данных, и вы можете изменитьmember_phone
или что угодно; наконец, вы можетеcsv
снова использовать модуль, чтобы сохранить файл в том же формате, в котором вы его открыли.Код для чтения:
Код для написания:
Конечно, вам нужно адаптировать свою
change()
функцию:источник
Of course, you need to adapt your change() function:
dict
тогда как csv работает больше как списокЯ не рассчитал это, но держу пари, что h5 быстрее, чем рассол; размер файла со сжатием почти наверняка меньше.
источник
Быстрое и грязное решение: преобразовать dict в строку и сохранить в файл, например:
источник