Изменение значения переменной с сохранением
У меня есть переменная D='tom'. Как сделать так, чтобы я ввел новое значение в input, и D='tom' поменялось на то значение, которое я ввел. Например, я в input введу "Ben", и переменная поменяется на D='Ben'. Нужно, чтобы после завершения работы кода pначение D='Ben' сохранилось.
Комп завис, поэтому скинул фото вместо самого кода. Обратите внимание на строку 28. Я хочу сделать так, чтобы когда я ввел название сервера один раз, оно сохранилось, не хочу вводить название каждый раз.
Ответы (3 шт):
Если нужно сохранять данные после завершения выполнения программы,
то надо будет записывать их в какой-нибудь файл, например: d.txt
from pathlib import Path
# Соответственно и получать значение ты будешь из файла
file_path = Path('d.txt')
# Проверяем, существует ли файл
if file_path.exists():
with open('d.txt', 'r', encoding="utf-8") as f:
d = f.read()
print(f'Начальное значение: {d}')
else:
raise FileNotFoundError(f'Файл {file_path} не найден.')
if new_d := input('Введите новое значение: '):
with open('d.txt', 'w', encoding="utf-8") as f:
f.write(new_d)
print(f'Новое значение: {new_d} сохранено в d.txt')
Успехов!
В качестве шутки. Следующая программа редактирует свою первую строку, если та соответствует формату D=<что-то там строковое>. Это будет работать, но делать так не надо. Правила хорошего тона рекомендуют отделять неизменные данные (код) от меняющихся. Для этого есть много веских причин, поверьте.
D='tom'
import re
def edit_d(new_d):
with open(__file__) as f:
lines = f.readlines()
if re.match("^D='.*'\n$", lines[0]) is not None or \
re.match('^D=".*"\n$', lines[0]) is not None :
lines[0] = f'D={new_d!r}\n'
with open(__file__, 'w') as f:
f.writelines(lines)
D = input()
edit_d(D)
Нужно, чтобы после завершения работы кода pначение D='Ben' сохранилось.
Дело обычное, вашей программе нужен файл конфигурации, традиционный подход - configparser. Чтение переменной со значением по умолчанию может быть таким:
import configparser
cfg_name = 'example.ini' # Имя файла конфигурации
cfg = configparser.ConfigParser()
cfg.read_string("""[DEFAULT] # Файл конфигурации по умолчанию
d = 42
""")
cfg.read(cfg_name) # Считываем файл конфигурации, если нет - не страшно
d = cfg.getint('DEFAULT', 'd') # Берём из него `d`
print(f'Старое значение: {d=}')
Что-то делаем, к примеру:
try:
d = int(input("Новое значение (Enter↵ - оставить старое):"))
except ValueError:
pass # Если введена пустая или некоректная строка, `d` - старое
print(f"Рабочее значение {d=}")
Потом сохраняем на будущее:
cfg['DEFAULT']['d'] = str(d) # В нужной секции под заданным именем
with open(cfg_name, 'w') as f: # Открываем файл на время `with`, если его нет, то создаётся
cfg.write(f) # Пишем в файл
Так, интереса ради, что у нас там записалось?
with open(cfg_name, 'r') as f: # Открываем файл для чтения на время `with`
print(f.read())
[DEFAULT]
d = 54
