Файл в стиле временного словаря

#python-3.x #pyqt5 #temporary-files

Вопрос:

Я работаю над приложением с графическим PyQt5 интерфейсом и хотел бы при запуске заполнить PyQt5.QLineEdit объекты информацией , которая использовалась ранее.

Я попытался достичь этой цели, создав простую функцию, которая создает .txt файл для каждого типа объекта редактирования строк (например, для объектов, ответственных за размеры изображения и т. Д.) В ./tmp папке, созданной вручную (как показано на Naive Example ).

Наивный Пример:

 import os
from pathlib import Path


temp_data_dict = dict(edit_line_1='temp data 1', edit_line_2='temp data 2', edit_data_3='temp data 3')
tmp_dir = Path('./tmp')
if not tmp_dir.is_dir():
    os.makedirs(tmp_dir)
with (tmp_dir / 'tmp_data.txt').open(mode='w') as temp_out:
    for idx, edit_line_key in enumerate(temp_data_dict):
        if idx < len(temp_data_dict) - 1:
            temp_out.write(f'{temp_data_dict.get(edit_line_key)}, ')
        else:
            temp_out.write(f'{temp_data_dict.get(edit_line_key)}')

with (tmp_dir / 'tmp_data.txt').open(mode='r') as temp_in:
    recovered_tmp_data = temp_in.read().split(sep=', ')
recovered_tmp_data_dict = dict()
for edit_line_key, tmp_data in zip(['edit_line_1', 'edit_line_2', 'edit_line_3'], recovered_tmp_data):
    recovered_tmp_data_dict[edit_line_key] = tmp_data
    
recovered_tmp_data_dict
 

выход:

 {'edit_line_1': 'temp data 1',
 'edit_line_2': 'temp data 2',
 'edit_line_3': 'temp data 3'}
 

Хотя это работает, txt на мой взгляд, довольно громоздко создавать кучу файлов, поэтому я задался вопросом, есть ли built-in модуль, который обеспечивает эту функциональность?

Я нашел tempfile модуль стандартной Python3.8 библиотеки (как показано на tempfile Library Example рисунке ),

tempfile Пример библиотеки:

 import tempfile as tmp

tmp_file = tmp.TemporaryFile(mode='w ')
tmp_file.write('edit_line_1: temp data 1, edit_line_2: temp data 2, edit_line_3: temp data 3')
tmp_file.seek(0)
data_str_list = tmp_file.read().split(sep=', ')

recovered_tmp_data_dict = dict()
for data_str in data_str_list:
    edit_line_key, data = data_str.split(sep=': ')
    recovered_tmp_data_dict[edit_line_key] = data
recovered_tmp_data_dict
 

выход:

 {'edit_line_1': 'temp data 1',
 'edit_line_2': 'temp data 2',
 'edit_line_3': 'temp data 3'}
 

но в нем я видел только методы, которые записывают в простой файл, в то время как я бы предпочел иметь что-то более сложное, например YAML файл, в котором я мог бы указать имя строки редактирования, заполняемой этим конкретным значением, более объектно-ориентированным способом (т. Е. и tmp_data.edit_line_1 т. Д.).

Мой вопрос:

в чем лучше всего сохранять и загружать временные данные python3 ?

Заранее спасибо

Комментарии:

1. Если вы используете QSettings , он будет обрабатывать большинство запутанных деталей для вас, а также может сериализовать сложные типы данных (в основном все, что можно вставить в QVariaint ).

2. Спасибо вам за ваш комментарий. Можете ли вы привести источник для понятного примера?

3. Я уже предоставил ссылку, в которой есть примеры pyqt.

4. Да, я понимаю. Я имел в виду, не могли бы вы объяснить, как работать с этим модулем?

5. Извините, я не совсем понимаю, что вы имеете в виду. Примеры в первой ссылке — это буквально все, что нужно для этого. Я предлагаю вам просто запустить их, чтобы увидеть, насколько это просто. Документы qt дают более подробную информацию о том, как все это работает (например, где файлы будут сохранены на каждой платформе ).