Считать несколько json файлов python
У меня имеется 2 Json файла, с вот таким содержимым
{
"ID":"item_1",
"NAME":"Sword",
"ATK":"10"
}
{
"ID":"item_2",
"NAME":"Iron Sword",
"ATK":"20"
}
Как мне считать их с 1 папки и вывести в виде списка и позже к каждому из них обратиться через консоль?
Пример:
╔══|Предметы|════
‖ [1] Sword
‖ [2] Iron Sword
‖ [3] -
‖ [4] -
╚════════════════
Ввожу 1
╔══|Действие|════
‖ Вы взяли Sword
╚════════════════
Ответы (1 шт):
Возожно я чуть-чуть не понял вопрос, если будет так, то я буду вводить правки
Код:
from json import dumps as encode, loads as decode
import os
def get_items() -> list[str]:
files = os.listdir("./items/")
for i, f in enumerate(files):
if not f.endswith(".json"):
files.pop(i)
return files
def get_data() -> list[dict]:
items_json: list[str] = [] # В JSON формате
items: list[dict] = [] # Декодированные элементы
items_files = get_items()
for f in items_files:
with open("items/"+f, 'r') as json_f:
items_json.append(json_f.read())
for item in items_json:
decoded_item = decode(item)
if isinstance(decoded_item, dict):
items.append(decoded_item)
return items
def main() -> int:
items = get_data()
print("╔══|Предметы|════")
for i in range(len(items)):
print(f"‖ [{i+1}] {items[i]['NAME']}")
print("╚════════════════\n")
INPUTED_CHOICE = False
while not INPUTED_CHOICE:
try:
selected_item = int(input("Выберите предмет (цифра): "))
if selected_item > len(items) or selected_item <= 0:
print("Неверный индекс\n")
continue
selected_item-=1
break
except ValueError:
print("Недопустимый ввод\n")
print(f"""
╔══|Действие|════
‖ Вы взяли {items[selected_item]['NAME']}
╚════════════════
╔══|Данные|══════
‖ Урон {items[selected_item]['ATK']}]
‖ ID [{items[selected_item]['ID']}]
╚════════════════
""")
return 0
if __name__ == "__main__":
exit(main())
Как работает код?
Первым делом, в функции main
,
вызывается функция get_data
Она нужна чтобы прочитать все файлы и декодировать их
get_data
, в свою очередь, будет вызывать функцию get_items
,
которая будет читать все файлы,
а get_data
декодирует их
По итогу, в main
получается перменная items
(тип list[dict]
),
которая хранит все декодированные данные из файлов
Важно!
Все файлы должны находиться в папке
items/
Далее программа выводит все оружия (данные из переменной items
)
После этого выводиться выбор,
в котором обходиться вариант, когда мы указываем не число (например Hello
),
и обходиться вариант, когда мы вводим индекс оружия, которого нет
И в конце выводиться, что мы выбрали какое-то оружие,
и выводиться информация о нем (урон и ID
)