Задать вопрос

Змея не хочет вытаскивать словарь из файла *.txt, как ей помочь?

Есть файл db.txt, который содержит всего одну строку^
{'000000': {'name': 'patient_zero', 'bank': 500}, '111111': {'name': 'Badmajor', 'bank': 1000}, '222222': {'name': 'Badmajor1', 'bank': 1000}}


И код, который теоретически может вытащить словарь, но ему чего то не хватает, выдает ошибку о строчных индексах. Но если просто вставить строку в код, читает как словарь.
with open('db.txt', 'r', encoding='utf-8') as db:
    db_dict = db.read()
    user_data = db_dict['000000']
    name_user = user_data['name']
    print(name_user)

Ошибка:
Traceback (most recent call last):
File "\main.py", line 5, in
user_data = db_dict['000000']
TypeError: string indices must be integers


Как быть, что делать?
  • Вопрос задан
  • 112 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
теоретически может вытащить словарь

А практически он читает строку.

Либо через json
import json

with open('db.txt', 'r', encoding='utf-8') as db:
    db_dict = json.load(db)


Либо через literal_eval, хотя json, конечно, лучше
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PRoGRamm_InG
Нужно сохранить словарь как .data
Напр:
import pickle
# имя файла, в котором мы сохраним объект
shoplistfile = 'shoplist.data'
shoplist = ['яблоки', 'манго', 'морковь']
# Запись в файл
f = open(shoplistfile, 'wb')
pickle.dump(shoplist, f) # помещаем объект в файл
f.close()
del shoplist # уничтожаем переменную shoplist


Вытащить можно так:
# Считываем из хранилища
f = open(shoplistfile, 'rb')
storedlist = pickle.load(f) # загружаем объект из файла
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы