При преобразовании str в dict получается пустой список

Samylov_2008

Новичок
Пользователь
Июн 1, 2020
7
0
1
Операционная система: "Windows". Python 3.8.
Я новичок, мало понимаю. Помогите пожалуйста. Заранее спасибо!
Код:
C++:
variantSimvoland = {"Словарь паролей": {}}
try:
                file = open ("Пароли.txt", "r")
                print ("До: " + file.read ())
                variantSimvoland ["Словарь паролей"] = dict (file.read ())
                print ("После преобразования: " + variantSimvoland ["Словарь паролей"])
                file.close ()
                pass

except:
                pass
          
a = str (input ("Под какой меткой сохранить?\n"))
variantSimvoland ["Словарь паролей"] [a] = "123"
file = open ("Пароли.txt", "w")
file.write(str (variantSimvoland ["Словарь паролей"]))
file.close ()

Выписывает так:
До: {'12': '123'}
После преобразования: {}
Под какой меткой сохранить?
Второе сообщение выводится пустым словарём (если файл создан). Хотя в файле txt есть словарь в str. Помогите пожалуйста. Заранее спасибо!
 
Последнее редактирование:

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
Ниже легкий рабочий вариант Вашего кода.
По-хорошему, вместо функции eval() нужен синтаксический разбор текста из файла.
Или вместо текстового файла использовали бы формат JSON (то, что пишется в файл, уж очень на него похоже).
Перед input() не надо писать str(), оно и так str.

Python:
variantSimvoland = {"Словарь паролей": {}} # создаем словарь с пустым словарем как value

try: # Пытаемся открыть файл с паролями в режиме "rt"
    with open("Пароли.txt") as file:
        variantSimvoland["Словарь паролей"] = eval(file.read())
except FileNotFoundError: # файла нет, заводим новый файл
    with open("Пароли.txt", "wt") as file:
        file.write(str(variantSimvoland["Словарь паролей"]))

# Ввод нового ключа для словаря, добавление его в словарь
a = input("Под какой меткой сохранить?\n")
variantSimvoland["Словарь паролей"][a] = "123"

# Сохраняем словарь в файл
with open("Пароли.txt", "wt") as file:
    file.write(str(variantSimvoland["Словарь паролей"]))

Я бы сделал так:

Python:
import json
try: # Получаем словарь из файла либо создаем новый словарь, если файла нет
    variantSimvoland = json.load(open("Пароли.json", encoding="utf-8"))
except FileNotFoundError:
    variantSimvoland = {"Словарь паролей": {}}
# Вводим ключ, дополняем словарь
a = input("Под какой меткой сохранить?\n")
variantSimvoland["Словарь паролей"][a] = "123"
# Словарь записываем в файл
json.dump(variantSimvoland, open("Пароли.json", 'w', encoding="utf-8"), ensure_ascii=False, indent=4)
 
Последнее редактирование:
  • Мне нравится
Реакции: Samylov_2008

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
1-я строка variantSimvoland = {"Словарь паролей": {}} у Вас заводит словарь с ключом "Словарь паролей" и значением {} - "пустой словарь" (или пустое множество).

Строкой кода variantSimvoland ["Словарь паролей"] = file.read () Вы затираете значение "пустой словарь" {} - и заменяете его СТРОКОЙ, в которой содержится строковое представление словаря из файла вида: '{'1': '123', '2': '10000' }' , потом с этой строкой Вы пытаетесь работать как со словарем.

Преобразуйте после чтения из файла строку в словарь хотя бы так:
variantSimvoland ["Словарь паролей"] = dict(file.read ())
 
  • Мне нравится
Реакции: Samylov_2008 и Vlad_SD

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
Подскажите пожалуйста.
Python:
variantSimvoland = {"Словарь паролей": {}}
try:
    
    file = open ("pas.txt", "r")
    print ("До: " + file.read())
    variantSimvoland ["Словарь паролей"] = dict (file.read())
    print ("После преобразования: ", variantSimvoland["Словарь паролей"])
    file.close ()
#    pass

except IOError:
    print('file not open')
#    pass


a = str(input("Под какой меткой сохранить?\n"))
print(a)
variantSimvoland ["Словарь паролей"][a] = '123'
# просто сделай файл на дозапись 'a' вместо перезаписи 'w'
file = open ("pas.txt", "a")
file.write(str (variantSimvoland ["Словарь паролей"])+'\n')
file.close ()
 
  • Мне нравится
Реакции: Samylov_2008

Samylov_2008

Новичок
Пользователь
Июн 1, 2020
7
0
1
1-я строка variantSimvoland = {"Словарь паролей": {}} у Вас заводит словарь с ключом "Словарь паролей" и значением {} - "пустой словарь" (или пустое множество).

Строкой кода variantSimvoland ["Словарь паролей"] = file.read () Вы затираете значение "пустой словарь" {} - и заменяете его СТРОКОЙ, в которой содержится строковое представление словаря из файла вида: '{'1': '123', '2': '10000' }' , потом с этой строкой Вы пытаетесь работать как со словарем.

Преобразуйте после чтения из файла строку в словарь хотя бы так:
variantSimvoland ["Словарь паролей"] = dict(file.read ())
Спасибо, я тоже позже об этом думал. Но есть какая-то ещё ошибка или нет... Он читает файл, но при преобразовании str в dict получается пустой словарь.
Исправленный код:
C++:
variantSimvoland = {"Словарь паролей": {}}
try:
                file = open ("Пароли.txt", "r")
                print ("До: " + file.read ())
                variantSimvoland ["Словарь паролей"] = dict (file.read ())
                print ("После преобразования: " + variantSimvoland ["Словарь паролей"])
                file.close ()
                pass

except:
                pass
            
a = str (input ("Под какой меткой сохранить?\n"))
variantSimvoland ["Словарь паролей"] [a] = "123"
file = open ("Пароли.txt", "w")
file.write(str (variantSimvoland ["Словарь паролей"]))
file.close ()

Как выписывает:
До: {'12': '123'}
После преобразования: {}
Под какой меткой сохранить?

Подскажите пожалуйста.
 
Последнее редактирование:

Samylov_2008

Новичок
Пользователь
Июн 1, 2020
7
0
1
Ниже легкий рабочий вариант Вашего кода.
По-хорошему, вместо функции eval() нужен синтаксический разбор текста из файла.
Или вместо текстового файла использовали бы формат JSON (то, что пишется в файл, уж очень на него похоже).
Перед input() не надо писать str(), оно и так str.

Python:
variantSimvoland = {"Словарь паролей": {}} # создаем словарь с пустым словарем как value

try: # Пытаемся открыть файл с паролями в режиме "rt"
    with open("Пароли.txt") as file:
        variantSimvoland["Словарь паролей"] = eval(file.read())
except FileNotFoundError: # файла нет, заводим новый файл
    with open("Пароли.txt", "wt") as file:
        file.write(str(variantSimvoland["Словарь паролей"]))

# Ввод нового ключа для словаря, добавление его в словарь
a = input("Под какой меткой сохранить?\n")
variantSimvoland["Словарь паролей"][a] = "123"

# Сохраняем словарь в файл
with open("Пароли.txt", "wt") as file:
    file.write(str(variantSimvoland["Словарь паролей"]))

Я бы сделал так:

Python:
import json
try: # Получаем словарь из файла либо создаем новый словарь, если файла нет
    variantSimvoland = json.load(open("Пароли.json", encoding="utf-8"))
except FileNotFoundError:
    variantSimvoland = {"Словарь паролей": {}}
# Вводим ключ, дополняем словарь
a = input("Под какой меткой сохранить?\n")
variantSimvoland["Словарь паролей"][a] = "123"
# Словарь записываем в файл
json.dump(variantSimvoland, open("Пароли.json", 'w', encoding="utf-8"), ensure_ascii=False, indent=4)
Спасибо большое! Вы настоящий специалист!
 
Последнее редактирование:

Форум IT Специалистов