2013-12-11 41 views
0

我在我的機器人上重新加載claim.DB時,在我的claim.py中有一個加載錯誤。這是代碼:Claim.py def load()上的小錯誤:

def load(): 
    claimDB = {} 
    data = open("claim.DB").read().split("\n") 
    for a in data: 
     if a.strip() != "": 
      claimDB[a.split(",")[0]] = a.split(",")[1:] 
    claim.claimDB = claimDB 

後它再重新裝入導致此: {「查爾斯」:[]}這是正確的方法是應該的。

要在重新加載後變成這樣: {'charles':['']}這不是正確的方法。

它不應該這樣做。我不確定如何解決這個問題,以免發生。

+1

它應該做什麼呢? –

+0

這是假設保留字典{'charles':[]} – user3089698

回答

1

假設claimDB是:解決此問題是去掉尾隨逗號這樣

 
charles, 

的一種方式列表:

def load(): 
    claimDB = {} 
    data = open("claim.DB").read().split("\n") 
    for a in data: 
     aslist = a.split(",") 
     if len(aslist) == 0: 
      pass # Blank Line so skip 
     else 
      claimDB[data[0]] = [a.strip() for a in data[1:] if len(a)] 

#Claim(s)NB如果aslist = [「東西」,然後aslist [1:] = []

claim.claimDB = claimDB 

當然,如果你的claimDB是通過您的代碼只能訪問,你可以保存所有的煩惱,通過改變保存閱讀&寫它,加載到:

import pickle 

def save(claim): 
    """ Save between sessions """ 
    with outfile = open('saveclaims.db' 'wb'): 
     pickle.dump(outfile, claim.claimDB) 
    finally: 
     outfile.flush() 
     outfile.close() 

def load(claim): 
    """ Load saved between sessions """ 
    with infile = open('saveclaims.db' 'rb'): 
     claim.claimDB = pickle.dump(infile) 
    finally: 
     infile.close() 
+0

其列表是:P when它添加在代碼是claim.claimDB [用戶] = claim.claimDB [用戶] + [姓名] – user3089698

+0

啊我從來沒有使用過鹹菜模塊。但是這實際上看起來要容易得多。 – user3089698

+0

它更加靈活,無論如何都值得學習泡菜。 –

1

當你有尾隨逗號時會發生這種情況。也就是說,如果你的「claim.DB」文件包含了這樣的事情:

def load(): 
    claimDB = {} 
    data = open("claim.DB").read().split("\n") 
    for a in data: 
     a = a.strip(', \n\t') 
     if a != "": 
      claimDB[a.split(",")[0]] = a.split(",")[1:] 
    claim.claimDB = claimDB 
+0

不錯,我會嘗試。謝謝<3 – user3089698

+0

它在[]中看起來更多名稱的方式就像列表{'charles':['test','name','tim']}那樣:P – user3089698