Как записать записи wxListBox в файл.txt на python
Я пытаюсь запрограммировать интерфейс wxFormBuilder для записи текста из wxListBox в текстовый файл. Мой текущий код:
def clickSave (self, parent):
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.*", wx.SAVE)
if dialog.ShowModal() == wx.ID_OK:
fn = dialog.GetPath()
fh = open(fn, "w")
for i in range(self.m_listBox4.GetCount()):
listBox = self.m_listBox4.GetString(i) + "\n"
fh.write(listBox)
fh.close()
В настоящее время этот код сохраняет только последнюю запись в списке вместо всех записей. У меня также возникают проблемы при импорте списков из текстового файла в wxListBox. С кодом, который у меня есть, я получаю сообщение об ошибке "TypeError: String or Unicode type required":
def clickOpen(self, event):
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
stockinfo = []
fn = dialog.GetPath()
fh = open(fn, "r")
csv_fh = csv.reader(fh)
for row in csv_fh:
stockinfo.append(row)
fh.close()
for rows in stockinfo:
self.m_listBox4.Append(rows)
1 ответ
В
for i in range(self.m_listBox4.GetCount()):
listBox = self.m_listBox4.GetString(i) + "\n"
вы всегда перезаписываете содержимое переменной listBox, поэтому остается только последняя строка. Возможно, вы захотите сделать:
listBox += self.m_listBox4.GetString(i) + "\n"
Однако объединение строк очень неэффективно. Вы должны делать что-то вроде:
for i in range(self.m_listBox4.GetCount()):
fh.write(self.m_listBox4.GetString(i))
fh.write("\n")
Что касается другого:
for row in csv_fh:
stockinfo.append(row)
Здесь row - это не String или Unicode, а последовательность. Вы просто помещаете эту последовательность в список и позже пытаетесь добавить ее в список. + Изменить
self.m_listBox4.Append(str(rows))
просто чтобы посмотреть, что он делает.