#python #tkinter
Вопрос:
Я пытаюсь записать значения текстовых полей в файл, подобный этому (где inputtxt-это текстовый виджет):
input_file_name = inputtxt1.get('1.0', 'end-1c').replace(" ","")
num_of_compare_points = inputtxt2.get('1.0','end-1c')
VER = inputtxt3.get('1.0','end-1c')
mode = inputtxt4.get(1.0','end-1c')
executionMode = inputtxt5.get('1.0','end-1c')
numOfWorkers = inputtxt6.get ('1.0','end-1c')
sessionFile = inputtxt7.get('1.0','end-1c')
file = open("file_1.setup","w")
file.write (input_file_name "n" num_of_compare_points "n" Option "n" VER "n" mode "n" executionMode "n" numOfWorkers "n" sessionFile)
Этот метод был хорош , но я хочу записать имя переменной значение в файл, чтобы пользователь мог заполнять значения из файла не только через графический интерфейс, и порядок в файле не будет иметь значения, так как мы храним в самой переменной, например:
Файл_1.настройка:
input_file_name = (какое-то имя, которое пользователь может изменить здесь, а не в графическом интерфейсе)
num_of_compare_points = (некоторое число, которое пользователь может изменить здесь, а не в графическом интерфейсе)
.
.
.
и т. д
ОБНОВЛЕНИЕ: Я использую атрибут файла:значение в функции восстановления, которая помещает значение каждого атрибута в соответствующее текстовое поле ; проблема здесь в том, что у меня есть только значение, но не переменная:значение и переменные должны быть в порядке (мне нужно, чтобы порядок был неуместным, так как я буду использовать имя переменной)
def restore_info():
if os.stat('file_1.setup').st_size == 0:
print("Writing to setup file..")
else:
with open('file_1.setup','r') as f:
lines = list(line for line in (l.strip() for l in f) if line)
x = len(lines)
print (x)
for i in lines:
print (i)
if (x==7):
inputtxt1.insert('end',lines[0])
inputtxt2.insert('end',lines[1])
inputtxt3.insert['end',lines[2])
... etc
UPDATE2 : Мне удалось разделить каждую строку на основе»:», но мне нужен способ указать программе, где переменная, а где значение
def restore_info():
if os.stat('file_1.setup').st_size == 0:
print("Writing to setup file..")
else:
with open('file_1.setup','r') as f:
lines = list(line for line in (l.strip() for l in f) if line)
x = len(lines)
print (x)
for i in lines:
splitted_i=i.split(":")
print (splitted_i)
ОБНОВЛЕНИЕ 3:Преимущество этого шага
- Пользователь сможет применить значение вручную, а не только через графический интерфейс.
- Приказ будет неуместен.
- Любое количество пробелов должно быть разрешено вокруг и между именем переменной и ее значением.
- Будет очень легко найти файл_1.setup и извлечь значение для каждого поля.
Комментарии:
1. Вы уже определили, что вы хотите в выходном файле, так в чем же проблема с его реализацией?
2. Мне нужно сохранить его как форму переменной:значение , так как мне нужно прочитать содержимое этого файла и поместить его в текстовые поля (при вызове кнопки restore_previous options) ; и пользователь может заполнить файл вручную и в другом порядке, чем этот . Например: напишите версию в первой строке, а затем имя файла в третьей строке, чтобы в случае, если у нас есть версия в качестве переменной, нас не волновал порядок . Надеюсь, теперь все ясно @acw1668
3. Нет, вы просто снова заявляете, чего хотите, но не указываете, с какой проблемой вы столкнулись, когда пытались это сделать.
4. Обновлено .пожалуйста, проверьте @acw1668
5. Ваше обновление по-прежнему не имеет ничего общего с тем, как вы пытались сохранить эти пары переменных: значение и прочитать файл для обновления соответствующих переменных на основе пар переменных: значение .
Ответ №1:
Что вам нужно сделать, так это собрать данные в дикт и сбросить их в виде пары ключ-значение
sessionFile = 'x'
executionMode = 'y'
data = {'sessionFile': sessionFile, 'executionMode': executionMode}
with open('out.txt', 'w') as f:
for k, v in data.items():
f.write(f'{k}:{v}n')
out.txt
sessionFile:x
executionMode:y
Комментарии:
1. Спасибо , но я хочу , чтобы формат файла состоял из нескольких строк, а не из файла json . Есть ли способ сделать это? @балдерман
2. Конечно. Пройдите по элементам диктанта и запишите каждый ключ,пару val в новой строке.
3. Есть ли вообще другой способ, кроме json ? Я пробую метод в комментариях, если вы можете проверить и помочь в этом. @балдерман
4. Обновите сообщение и как ожидается, окончательный текст файла.
5. Обновленный. @балдерман