Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加禁止原因模块错误dict对象没有属性append and load和save方法无法正确保存和加载_Python - Fatal编程技术网

Python 添加禁止原因模块错误dict对象没有属性append and load和save方法无法正确保存和加载

Python 添加禁止原因模块错误dict对象没有属性append and load和save方法无法正确保存和加载,python,Python,有人能帮我把信息添加到dict的一个键上并相应地更新这些信息吗 还有人能给我一个比我现在做的更好的保存和加载方法吗 我当前的dict键方法: def add_banreason(roomname, username, reason): roomname = roomname.lower() username = username.lower() if not roomname in banr.banr_database: banr.banr_databas

有人能帮我把信息添加到dict的一个键上并相应地更新这些信息吗

还有人能给我一个比我现在做的更好的保存和加载方法吗

我当前的dict键方法:

  def add_banreason(roomname, username, reason):
    roomname = roomname.lower()
    username = username.lower()
    if not roomname in banr.banr_database:
      banr.banr_database[roomname] = {username:reason}
    else:
      banr.banr_database[roomname].append({username:reason})
我在这里得到一个错误,说
dict对象没有属性append

我正在寻找这样一个没有错误的结果:

{roomname: {username:reason, username:reason, username:reason}, roomname: {username:reason, username:reason, username:reason}}
我当前的保存和加载方法:

  ### load the database
  def load():
    banr_database = {}
    with open("banr.DB","r") as t:
      data = t.read()
    if data != "":
      for l in data.split("\n"):
        a,b = l.split("):(",1)
        c = [w.split(")-(") for w in b.split("(:)")]
        banr_database[a] = c
    banr.banr_database = banr_database

  ### save the database
  def save():
    l = []
    for a,b in banr.banr_database.items():
      c = "(:)".join([")-(".join(w) for w in b])
      l.append(a+"):("+c)
    with open("banr.DB","w") as t:
      t.write("\n".join(sorted(l)))
我希望此信息以下面给定示例中的格式保存和加载:

{roomname: {username:reason, username:reason, username:reason}, roomname: {username:reason, username:reason, username:reason}}
然而,我得到的却是:

anime-gir):(k)-(a)-(m)-(i)-(j)-(o)-(u)-(t)-(o)-(u)-(m)-(a)-(3)-(1)-(0
原因不在那里,用户名已被拆分。它也不是dict格式

有人能告诉我我做错了什么,这里什么代码适合做我想做的而不是我现在拥有的吗

banr.banr_database[roomname].update({username:reason})
dicts没有附加。。。他们有一个更新,应该做你想要的

要保存,只需序列化数据。。。pickle为这个工作。。。不过json的速度要快得多

import json
db_fname = "banr.DB"
def load():
    banr.banr_database = json.load(open(db_fname))

 def save():
     json.dump(banr.banr_database,open(db_fname,"w"))

+1 Joran Beasley关于快速响应关于回答我问题的前半部分如果有人能为我回答下半部分,我会非常高兴+1 Joran Beasley再次感谢你帮助我正确地完成了模块,完整地回答了问题只是暂时搁置一下,你可能会更好地使用sqlite处理这类问题编辑问题我希望我做到了是的,看起来是这样,我接受的答案仍然符合我的问题,我已经把我的问题说得比以前清楚多了