Есть задача:
Пример работы утилиты:
Сохранение значения value по ключу key_name:
$ storage.py --key key_name --val value
Получение значения по ключу key_name:
$ storage.py --key key_name
Задача: написать реализацию утилиты storage.py.
Утилита может вызваться со следующими параметрами:
--key <имя ключа> , где <имя ключа> - ключ по которому сохраняются/получаются значения
--val <значение>, где <значение> - сохраняемое значение.
Если при запуске утилиты переданы оба ключа, происходит добавление переданного значения по ключу и сохранение данных в файле. Если передано только имя ключа, происходит чтение файла хранилища и вывод на печать значений, которые были сохранены по данному ключу. Обратите внимание, что значения по одному ключу не перезаписываются, а добавляются к уже сохраненным. Другими словами - по одному ключу могут храниться несколько значений. При выводе на печать, значения выводятся в порядке их добавления в хранилище. Формат вывода на печать для нескольких значений:
value_1, value_2
Обратите внимание на пробел после запятой. Если значений по ключу не было найдено, выведите пустую строку или None.
Для работы с аргументами командной строки используйте модуль argparse. Хранить данные в файле мы рекомендуем в формате JSON с помощью использования модуля стандартной библиотеки json. Прежде чем отправлять ваше решение на проверку, протестируйте работу вашей утилиты на добавление нескольких ключей и разных значений.
Файл следует создавать с помощью модуля tempfile.
import os
import tempfile
storage_path = os.path.join(tempfile.gettempdir(), 'storage.data')
with open(storage_path, 'w') as f:
...
Пример работы:
$ python storage.py --key key_name --val value
$ python storage.py --key key_name
value
$ python storage.py --key multi_key --val value1
$ python storage.py --key multi_key --val value2
$ python storage.py --key multi_key
value1, value2
Я ее решил вот так:
import os
import sys
import tempfile
import json
storage_path = os.path.join(tempfile.gettempdir(), 'storage.data')
storage = {}
def key(dictionary, key):
dictionary.update(key, None)
def key_and_value(dictionary, key, value):
dictionary.update(key, value)
with open(storage_path, 'w') as f:
if len(sys.argv) <= 3 and sys.argv[1] == '--key':
if sys.argv[2] not in storage:
key(storage, sys.argv[2])
json.dump(storage, f)
if sys.argv[2] in storage:
with open(storage_path, 'w') as f:
storage.get(key[sys.argv[2]])
if len(sys.argv) > 3 and (sys.argv[1] == '--key' and sys.argv[3] == '--val'):
key_and_value(storage, sys.argv[2], sys.argv[4])
json.dump(storage, f)
Но у меня есть ошибки в ходе выполнения данной программы.
Пожалуйста, буду очень благодарен, если вы мне объясните как решить эту задачу, и покажите что у меня было не так.