上的小错误索赔.pydef load():

2024-05-15 20:48:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我的电脑有一个加载错误索赔.py当我重新加载时索赔.DB在我的机器人上。代码如下:

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':[]}这是正确的方式。你知道吗

要在重新加载后变成这样: {charles':['']}这不是正确的方法。你知道吗

这是不可能的。我真的不知道如何修复它,这样就不会发生。你知道吗


Tags: 代码pyreaddbdatadef错误机器人
2条回答

假设claimDB是一个列表:

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)]

#索赔N.B.如果aslist=['某物',]那么aslist[1:]=[]

    claim.claimDB = claimDB

当然,如果您的claimDB只能通过您的代码访问,您可以通过将save和load更改为:

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()

如果后面有逗号,就会出现这种情况。也就是说,如果你的索赔.DB“文件包含如下内容:

charles,

解决此问题的一种方法是如下所示去掉尾随逗号:

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

相关问题 更多 >