Если у меня довольно большая структура данных, например, список или словарь, и я загружаю его из файла pickle в Python, а затем изменяю только одну или две записи, могу ли я обновить только те записи в файл или мне нужно записать всю структуру данных обратно в файл? Идея заключается в том, чтобы избежать чрезмерной и ненужной активности жесткого диска, особенно при написании.Обновление файла Pickle Python
Если я не могу этого сделать, я думаю, мне нужно перейти на базу данных?
UPDATE: Я пытался @ рекомендации Pynchia, чтобы использовать shelve
модуль, и это делает работу хранения и модификации данных. Мне нужно только подтвердить, что, когда я изменяю поле одного номера телефона, на это записывается только одно поле или максимум одна запись на диск, а не весь набор данных. Это так или нет? Вот в чем вопрос.
import shelve
s = shelve.open('test.dat')
for i in range(3):
record = {'name': 'ABC'+str(i), 'phone': ((str(i)*3)+'-'+(str(i)*4)),
'addr': (str(i)*3)+' Main St'}
s[str(i)] = record
s.close
s = shelve.open('test.dat')
for i in range(3):
print(s[str(i)])
s.close
s = shelve.open('test.dat')
temp = s['1']
temp['phone']='1-800-GET-PYTHON'
s['1']=temp
s.close
print()
s = shelve.open('test.dat')
for i in range(3):
print(s[str(i)])
s.close
Выход:
{'name': 'ABC0', 'addr': '000 Main St', 'phone': '000-0000'}
{'name': 'ABC1', 'addr': '111 Main St', 'phone': '111-1111'}
{'name': 'ABC2', 'addr': '222 Main St', 'phone': '222-2222'}
{'name': 'ABC0', 'addr': '000 Main St', 'phone': '000-0000'}
{'phone': '1-800-GET-PYTHON', 'addr': '111 Main St', 'name': 'ABC1'}
{'name': 'ABC2', 'addr': '222 Main St', 'phone': '222-2222'}
Просьба привести конкретный пример. Вы посмотрели [полка] (https://pymotw.com/2/shelve/)? Может быть, это может помочь – Pynchia
@Pynchia Пожалуйста, см. Мое обновленное сообщение. – mcu
Благодарю вас за данные. Shelve построен на вершине 'pickle', поэтому я не думаю, что он сможет удовлетворить ваши требования. Я не эксперт по маринуемому/полку, давайте подождем гуру. Я предложил это, потому что мне было непонятно, если вы хотите обновить целую запись в последовательности записей или поле/атрибут только в пределах одной записи. – Pynchia