如何将wxListBox条目写入Python中的.txt文件中

问题描述:

我试图编写一个wxFormBuilder接口,将文本从wxListBox写入文本文件。我当前的代码:如何将wxListBox条目写入Python中的.txt文件中

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。随着我的代码,我得到一个“类型错误:字符串或Unicode类型所需”的错误:

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) 

for i in range(self.m_listBox4.GetCount()): 
    listBox = self.m_listBox4.GetString(i) + "\n" 

你始终覆盖列表框变量的内容,因此只有最后一行停留在你可能想要做的:

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) 

这里,行不是字符串或Unicode,而是一个序列。你只是把这个序列放到一个列表中,然后尝试将它添加到列表框中。更改

self.m_listBox4.Append(str(rows)) 

只是为了看看它做了什么。

+0

嘿Petr,你的保存功能很完美,非常感谢你。
打开函数确实会带入列表,但每行都被括号和引号包围。所以上传的名单看起来像:
[“1号线”] [“2号线”] [“3号线”] 而原来的文本文档中它显示为: 线1 线2 线3 有什么办法可以使用切片来解决这个问题? – 2014-12-05 14:09:50

+0

那么,如果你用csv阅读器读取,你会收到元组,那么当你将它们转换为一个字符串时,你会得到[“something”],...如果你只想要字符串,不要用csv.reader ,只是:对于我在fh.readlines()中:... ...另外,如果您不需要保持数据读取,请在与读数相同的周期内执行列表插入。 – 2014-12-05 19:24:04

+0

累积奖金!你摇滚,谢谢你,先生! – 2014-12-06 00:55:48