Pyrym
@Pyrym
Python 3 и PyQt5

PyQt4 | Как лучше прочитать из файла список?

# Python 3. PyQt4
Хочу из файла загрузить исходные данные для тестового расчёта. В файле данные записаны в виде списка, т.е.:
[20, 8, 4]
Есть код, который считывает из файла эти данные и вставляет их в поля:
def on_open_isd (self):
        options = QtGui.QFileDialog.Options()
        self.fileName = QtGui.QFileDialog.getOpenFileName(self, "Открыть как", "ИД. Расчёт объёма.txt",
                                                           "Text Files (*.txt)", options=options)  
                  
        if self.fileName:
            self.readFile = open(self.fileName, 'r', encoding='utf-8')
            open_isd = self.readFile.read()
            self.readFile.close()
        open_isd = open_isd[1:-1].replace(' ','')
        open_isd = open_isd.split(',')  
        self.pole_a.setText(str(open_isd[0]))
        self.pole_b.setText(str(open_isd[1]))
        self.pole_h.setText(str(open_isd[2]))

Однако, мне не нравится подобный подход. Хотелось бы сразу извлекать из файла переменную в виде списка, чтобы не приходилось осуществлять перевод на язык питона.
1) В идеале было бы сделать подключение модуля через диалоговое окно, но мне не знаком данный метод. На сколько я понимаю, его не существует.
2) Как можно улучшить приведённую мной функцию в данном исполнении.
3) А также в случае, если в файле будет больше одного списка?
  • Вопрос задан
  • 324 просмотра
Решения вопроса 2
qlkvg
@qlkvg
python backend developer
import ast
ast.literal_eval("[20, 8, 4]")

Если больше одного списка, то все зависит от формата записи. Скорее всего сначала придется распарсить как регулярный текст.
Ответ написан
@danis_2014
Если в файле на каждой строке по списку, то можно использовать следующее:
data = []  # список полученных из файла списков
for line in open(file_name, mode='r', encoding='utf-8-sig'):
    data.append(eval(line))

Функция eval() преобразует строку в питоновский код, поэтому нужно убедиться, что в файле нет ничего лишнего и опасного для выполнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы