如何将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))
只是为了看看它做了什么。
嘿Petr,你的保存功能很完美,非常感谢你。
打开函数确实会带入列表,但每行都被括号和引号包围。所以上传的名单看起来像:
[“1号线”] [“2号线”] [“3号线”] 而原来的文本文档中它显示为: 线1 线2 线3 有什么办法可以使用切片来解决这个问题? – 2014-12-05 14:09:50
那么,如果你用csv阅读器读取,你会收到元组,那么当你将它们转换为一个字符串时,你会得到[“something”],...如果你只想要字符串,不要用csv.reader ,只是:对于我在fh.readlines()中:... ...另外,如果您不需要保持数据读取,请在与读数相同的周期内执行列表插入。 – 2014-12-05 19:24:04
累积奖金!你摇滚,谢谢你,先生! – 2014-12-06 00:55:48