Здравствуйте! В программировании новичок. Нашел интересный (для себя:)) пример консольного словаря (
https://www.unix-lab.org/posts/pydict/). Пример состоит из трёх файлов:
1) words_db.py (база данных):
# words_db.py #!/usr/bin/env python
# -*- coding:utf-8 -*-
import shelve
db = shelve.open('db_file')
db['earth']='земля'
db['word']='слово'
db['catch']='ловить'
db['find']='искать'
db.close()
2) dump_words_db.py (не могу понять для чего):
# dump_words_db.py #!/usr/bin/env python
# -*- coding:utf-8 -*-
import shelve
db=shelve.open('db_file')
print('Yes')
3) start_programm.py (основной функционал):
# start_programm.py #!/usr/bin/env python
# -*- coding:utf-8 -*-
import shelve
db=shelve.open('db_file')
def eng():
eng_words=dict([[v, k] for k,v in db.items()])
find_word=input('Enter word ' '')
print(eng_words.get(find_word) or print('No such key'))
def rus():
key=input('Введите слово ' '')
print (db.get(key) or 'Искомое слово не найдено')
def newRecord():
newkey=input('Ввести новое слово ' '')
newvalue=input('Ввести перевод ' '')
db[newkey] = newvalue
db.update()
db.close()
if __name__ == '__main__':
start=input('Найти английский перевод русского слова? введите "y" или "n" ' '')
if start == 'y':
eng()
elif start == 'n':
rus()
elif start == 'u':
newRecord()
else:
print('До встречи')
База данных создана с помощью модуля shelve. Программа работает, но только со словами, введёнными после запуска программы (при введении "u"). Эти новые слова в базу данных (файл words_db.py) не заносятся. А сама эта бд (т.е. слова помещенные туда при написании программы, а не после её запуска) вообще игнорируется! Например, слово catch - "ловить" есть в бд, но программа не находит его ни по ключу, ни по значению. Вроде код правильный. В чём ошибка? Использую Windows 7 и Python 3.8.1. Заранее благодарен! С уважением, Илья.