1. Главная
  2. Библиотека
  3. Программирование
  4. # Задача 2: Поиск и изменение данных в JSON Описание: Н...
Решение задачи на тему

# Задача 2: Поиск и изменение данных в JSON Описание: Напишите программу, которая: 1. Считывает файл tokens.json, содержащий информацию о (например, name, price). 2. Позволяет пользователю изменить price по его name. 3. Обновляет файл tokens.json с новыми

  • Программирование
  • #Основы алгоритмизации и программирования
  • #Базы данных и SQL
# Задача 2: Поиск и изменение данных в JSON Описание: Напишите программу, которая: 1. Считывает файл tokens.json, содержащий информацию о (например, name, price). 2. Позволяет пользователю изменить price по его name. 3. Обновляет файл tokens.json с новыми

Условие:

# Задача 2: Поиск и изменение данных в JSON

Описание: Напишите программу, которая:

1. Считывает файл tokens.json, содержащий информацию о (например, name, price).

2. Позволяет пользователю изменить price по его name.

3. Обновляет файл tokens.json с новыми значениями и форматирует JSON с отступами.


def readtokensjson():
try:
with open("tokens.json", "r", encoding="utf-8") as file:
tokens = json.load(file)
except FileNotFoundError:
tokens = []

token = input("Введите название токена: ")

while True:
try:
balance = int(input("Введите новый баланс: "))
break
except ValueError:
print("Баланс должен быть числом. Попробуйте снова.")

newtoken = {
"token": token,
"balance": balance
}

tokens.append(newtoken)

with open("tokens.json", "w", encoding="utf-8") as file:
json.dump(tokens, file, indent=4, ensureascii=False) # Это нагуглила, когда вводила кириллицей ответы

readtokensjson()

Решение:

Ниже приводится один из возможных вариантов решения задачи с подробными комментариями и пошаго...

import json

def loadokens(filename=tokens.json):

Функция загружает данные из файла tokens.json. Если файла не существует, возвращается пустой список.

try: with open(filename, r, encoding=utf-8) as file: tokens = json.load(file) except FileNotFoundError: tokens = [] return tokens

def saveokens(tokens, filename=tokens.json):

Функция сохраняет данные tokens в файл tokens.json с отступами.

with open(filename, w, encoding=utf-8) as file: json.dump(tokens, file, indent=4, ensurescii=False)

def updateprice(tokens):

Функция запрашивает у пользователя название токена и новый price, затем ищет токен по name и обновляет его price, если такой токен найден. Если токена с заданным именем не существует, выводится сообщение.

tokename = input(Введите название токена для обновления цены: )

Флаг для проверки, найден ли токен

found = False

Проходим по всем токенам

for token in tokens: if token.get(name) == tokename:

Если нашли нужный токен, запрашиваем новый price

while True: try: newrice = float(input(Введите новое значение price: )) break except ValueError: print(Цена должна быть числом. Попробуйте снова.) token[price] = newrice found = True print(fЦена токена {tokename} успешно обновлена.) break

if not found: print(fТокен с названием {tokename} не найден.)

def main():

Шаг 1: ЗАГРУЗКА данных из файла tokens.json

tokens = loadokens()

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

if not tokens: print(Файл tokens.json не найден или он пуст. Добавьте новый токен.) tokename = input(Введите название токена: ) while True: try: price = float(input(Введите значение price: )) break except ValueError: print(Цена должна быть числом. Попробуйте снова.) newoken = { name: tokename, price: price } tokens.append(newoken) print(Новый токен добавлен.)

Шаг 2: Изменение данных – поиск токена по name и обновление его price

updateprice(tokens)

Шаг 3: Сохранение обновленного списка токенов в файл tokens.json с отступами

saveokens(tokens) print(Файл tokens.json успешно обновлен.)

if == : main()

──────────────────────────── Пошаговое объяснение решения:

  1. Импорт модуля json: Мы используем модуль json для чтения и записи данных в формате JSON.

  2. Функция loadokens(): • Пытаемся открыть файл tokens.json для чтения. • Если файл открыт успешно, данные загружаются с помощью json.load() и возвращаются. • Если файл не найден (FileNotFoundError), возвращается пустой список tokens.

  3. Функция saveokens(): • Принимает обновлённый список токенов и сохраняет его в файл tokens.json. • Для сохранения используется json.dump() с параметрами indent=4 (для отступов) и ensurescii=False, чтобы корректно сохранялись кириллические символы.

  4. Функция updateprice(): • Запрашивает у пользователя ввести название токена, для которого требуется изменить цену. • Перебирает элементы списка tokens, каждый из которых является словарем. • Если в токене ключ name совпадает с введенным значением, запрашивает новый price. • Проводится проверка введённого значения на возможность преобразования в число (float). При неверном вводе пользователю предлагается повторить ввод. • После успешного ввода новое значение записывается в токен под ключом price. • Если токен не найден, выводится соответствующее сообщение.

  5. Функция main(): • Вызывается функция loadokens() для загрузки данных из файла. • Если список токенов пуст (что может означать, что файл не существует или пустой), пользователю предлагается добавить новый токен. • Затем вызывается функция updateprice() для изменения цены у выбранного токена. • После изменения данных вызывается функция saveokens(), которая записывает обновленные данные обратно в файл tokens.json с красивым форматированием. • Выводится сообщение об успешном обновлении файла.

  6. Блок if == : • Обеспечивает запуск функции main() при выполнении скрипта напрямую, что является стандартной практикой в Python.

Таким образом, программа выполняет условие задачи: читает JSON-файл, позволяет пользователю изменить значение price по названию токена и сохраняет обновленный файл в отформатированном виде.

Выбери предмет