#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 дают более подробную информацию о том, как все это работает (например, где файлы будут сохранены на каждой платформе ).