2014-12-05 67 views
0

我試圖編寫一個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) 

回答

0

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