zhu*_*yxn 19 python database json dictionary
目前昂贵地解析文件,该文件生成约400个键值对的字典,其很少更新.以前有一个解析文件的函数,用字典语法(即.dict = {'Adam': 'Room 430', 'Bob': 'Room 404'})等将它写入文本文件,并将其复制并粘贴到另一个函数中,该函数的唯一目的是返回该解析的字典.
因此,在我将使用该字典的每个文件中,我将导入该函数,并将其分配给变量,现在是该字典.想知道是否有更优雅的方法来做到这一点,这不涉及明确地复制和粘贴代码?使用数据库似乎是不必要的,并且文本文件给了我在将其添加到函数之前查看解析是否正确完成的好处.但我愿意接受建议.
Amb*_*ber 42
为什么不将它转储到JSON文件,然后从你需要的地方加载它?
import json
with open('my_dict.json', 'w') as f:
json.dump(my_dict, f)
# elsewhere...
with open('my_dict.json') as f:
my_dict = json.load(f)
Run Code Online (Sandbox Code Playgroud)
从JSON加载相当有效.
另一种选择是使用pickle,但与JSON不同,它生成的文件不是人类可读的,因此您会丢失您从旧方法中获得的视觉验证.
Pau*_*McG 18
为什么搞乱所有这些序列化方法?它已经作为Python dict写入文件(虽然名字'dict'不幸).更改程序以使用更好的变量名称写出数据 - 可能是"数据"或"目录",并将文件保存为Python文件,例如data.py. 然后,您可以直接在运行时导入数据,而无需任何笨拙的复制/粘贴或JSON /搁置/等.解析:
from data import catalog
Run Code Online (Sandbox Code Playgroud)
在许多情况下,JSON 可能是正确的方法;但可能有另一种选择。看起来你的键和值总是字符串,对吗?您可以考虑使用dbm/ anydbm。这些是“数据库”,但它们的作用几乎与字典完全一样。它们非常适合廉价的数据持久性。
>>> import anydbm
>>> dict_of_strings = anydbm.open('data', 'c')
>>> dict_of_strings['foo'] = 'bar'
>>> dict_of_strings.close()
>>> dict_of_strings = anydbm.open('data')
>>> dict_of_strings['foo']
'bar'
Run Code Online (Sandbox Code Playgroud)