Сохранение и чтение данных, сгенерированных пользователем

We use cookies. Read the Privacy and Cookie Policy

Сохранение с использованием модуля json особенно полезно при работе с данными, сгенерированными пользователем, потому что без сохранения эта информация будет потеряна при остановке программы. В следующем примере программа запрашивает у пользователя имя при первом запуске программы и «вспоминает» его при повторных запусках.

Начнем с сохранения имени пользователя:

remember_me.py

import json

(1) username = input("What is your name? ")

filename = 'username.json'

with open(filename, 'w') as f_obj:

(2) . .json.dump(username, f_obj)

(3) . .print("We'll remember you when you come back, " + username + "!")

В точке (1) программа запрашивает имя пользователя для сохранения. Затем вызывается функция json.dump(), которой передается имя пользователя и объект файла; функция сохраняет имя пользователя в файле (2). Далее выводится сообщение о том, что имя пользователя было сохранено (3):

What is your name? Eric

We'll remember you when you come back, Eric!

А теперь напишем другую программу, которая приветствует пользователя по ранее сохраненному имени:

greet_user.py

import json

filename = 'username.json'

with open(filename) as f_obj:

(1) . .username = json.load(f_obj)

(2) . .print("Welcome back, " + username + "!")

В точке (1) вызов json.load() читает информацию из файла username.json в переменную username. После того как данные будут успешно прочитаны, мы можем поприветствовать пользователя по имени (2):

Welcome back, Eric!

Теперь эти две программы необходимо объединить в один файл. Когда пользователь запускает remember_me.py, программа должна взять имя пользователя из памяти, если это возможно; соответственно, программа начинается с блока try, который пытается прочитать имя пользователя. Если файл username.json не существует, блок except запросит имя пользователя и сохранит его в username.json на будущее:

remember_me.py

import json

# Программа загружает имя пользователя, если оно было сохранено ранее.

# В противном случае она запрашивает имя пользователя и сохраняет его.

filename = 'username.json'

try:

(1) . .with open(filename) as f_obj:

(2) . . . .username = json.load(f_obj)

(3)except FileNotFoundError:

(4) . .username = input("What is your name? ")

(5) . .with open(filename, 'w') as f_obj:

. . . .json.dump(username, f_obj)

. . . .print("We'll remember you when you come back, " + username + "!")

else:

. .print("Welcome back, " + username + "!")

Никакого нового кода здесь нет; просто блоки кода из двух предыдущих примеров были объединены в один файл. В точке (1) программа пытается открыть файл username.json. Если файл существует, программа читает имя пользователя в память (2) и выводит сообщение, приветствующее пользователя, в блоке else. Если программа запускается впервые, то файл username.json не существует, и происходит исключение FileNotFoundError (3). Python переходит к блоку except, в котором пользователю предлагается ввести имя (4). Затем программа вызывает json.dump() для сохранения имени пользователя и выводит приветствие (5).

Какой бы блок ни выполнялся, результатом является имя пользователя и соответствующее сообщение. При первом запуске программы результат выглядит так:

What is your name? Eric

We'll remember you when you come back, Eric!

Если же программа уже была выполнена хотя бы один раз, результат будет таким:

Welcome back, Eric!