2011-11-20 69 views
1

我想寫一個非常簡單的腳本來模擬一個口袋裏的祕書作業,但我有一個小問題。 我希望每次退出程序時都將所有數據保存在一個文件中(抽象形式),然後當我啓動它時,我想讀取該文件,eval(堆棧)(基本上將數據加載到內存中),然後驗證如果它是有效的......任何不是被刪除的。 這是我做了什麼:Python試圖將字符串寫入文件然後讀取字符串和eval,但出錯了

def loadToString (stack): 
     f = open ("data.txt", "w") 
     load_stack = str(stack) #convert to string 
     f.write (load_stack) #write in file 
     f.close() 

    def loadFromString(): 
     f = open ("data.txt", "r") 
     load_stack = f.readline() #read string 
     if (load_stack == "" or load_stack == " " or load_stack == None): 
      stack = [] 
      return stack 
     else: 
      stack = eval(load_stack) #trying to convert from string to list 
     f.close() 

當我看着文件我的問題是...,因爲它缺少撇號<它不是一個真正的字符串「>因此,當我嘗試」的eval(堆棧)「出了點問題,我的」記憶「最終變空了(當我試圖打印堆棧時,它是空的 - 無 - )

我不能爲我的生活理解爲什麼會發生這種情況。 (在.txt文件中人工添加撇號)

我不知道如何檢查文件是否爲空或者如果我讀取空格y線,所以我也很感激你是否可以用「loadFromString」中的「if」語句來幫助我。 關於eval()...就像我說的這只是作業,所以我不害怕任何惡意的意圖。

回答

2

要處理您的直接問題,請將行load_stack = str(stack)更改爲load_stack = repr(stack)。這將添加撇號。

之後,您可能需要查看csv moduleshelve module。兩者都易於使用,並會照顧許多低級別的細節。