Почему в консольном словаре основной файл игнорирует базу данных?

Здравствуйте! В программировании новичок. Нашел интересный (для себя:)) пример консольного словаря (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. Заранее благодарен! С уважением, Илья.

61631cdf9860d112215879.png
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Wispik
1. Научись оформлять вопрос (код нельзя в виде скриншотов вставлять)
2. В db_file.py не хватает db. update()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы