Python 试图在列表中解析json字典以创建sqlite数据库
我有以下代码将原始输入写入文件:Python 试图在列表中解析json字典以创建sqlite数据库,python,json,sqlite,dictionary,unicode,Python,Json,Sqlite,Dictionary,Unicode,我有以下代码将原始输入写入文件: import json a = raw_input("time meds taken?: format '@12:00' ") b = raw_input("had food at that point?: format '#0/1' ") ax = {"meds": a} bx = {"food": b} with open("chance1.json", "a") as f: json.dump([ax, bx], f) f.close()
import json
a = raw_input("time meds taken?: format '@12:00' ")
b = raw_input("had food at that point?: format '#0/1' ")
ax = {"meds": a}
bx = {"food": b}
with open("chance1.json", "a") as f:
json.dump([ax, bx], f)
f.close()
然后,我得出以下结论:
[{"meds": "11:00"}, {"food": "0"}, {"meds": "12:45"}, {"food": "0"}, {"meds": "10:45"}, {"food": "0"}]
然后我需要将上面的数据输入到sqlite浏览器中。我目前正在使用以下代码:
import json
import sqlite3
conn = sqlite3.connect ('meds.sqlite')
cur = conn.cursor()
cur.executescript('''
DROP TABLE IF EXISTS Meds;
DROP TABLE IF EXISTS Food;
CREATE TABLE Meds (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
time TEXT UNIQUE
);
CREATE TABLE Food (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
meds_id INTEGER,
status TEXT UNIQUE
);
''')
fname = raw_input('Enter file name: ')
if ( len(fname) < 1 ) : fname = 'chance1.json'
str_data = open(fname).read()
json_data = json.loads(str_data)
for entry in json_data:
time = entry["meds"]
status = entry["food"]
print time, status'
导入json
导入sqlite3
conn=sqlite3.connect('meds.sqlite')
cur=连接光标()
当前执行脚本(“”)
如果存在MED,则丢弃表格;
如果有食物,放下桌子;
创建表格药物(
id整数非空主键自动递增唯一,
时间文本唯一
);
创造餐桌上的食物(
id整数非空主键自动递增唯一,
meds_id整数,
状态文本唯一
);
''')
fname=raw_输入('输入文件名:')
if(len(fname)<1):fname='chance1.json'
str_data=open(fname).read()
json\u data=json.loads(str\u数据)
对于json_数据中的条目:
时间=输入[“药物”]
状态=条目[“食品”]
打印时间、状态'
然而,我最终得到了一个回溯
键错误:“食物”
。请问,如何着手解决这个问题,有什么建议吗?请注意代码还没有完成,因为我无法超越这一部分!(文件也有可能是Unicode格式的,因为当我打印条目时,每个条目前都会有一个“u”。你的大部分文章都与键错误无关。您正在向词典查询一些不存在的内容,即与键“food”
关联的值
一种解决方案是使用dict.get
,如果找不到密钥,则返回None:
status = entry.get('food')
# status will be None if there is no 'food' key
您还可以使用带有默认值的get
:
status = entry.get('food', 123)
另一种可能是缺少密钥表示应用程序中存在错误。在这种情况下,您需要考虑为什么没有<代码>“食物”<代码>键。
目前,您正在将“食物”
和“药物”
信息存储在单独的词典中,然后将它们合并到一个列表中。也许您需要以下内容:
data = {"meds": a, "food": b}
with open("chance1.json", "a") as f:
json.dump(data, f)
这就把食品和药品信息放在了同一本字典里。请注意,以模式'a'
打开文件意味着新数据将附加到现有文件中。如果要附加到存储为json的现有列表中,则需要读取现有数据,对其进行解析,将新项添加到列表中,然后重新写入文件。
检查您的json文件,它看起来像您期望的吗?尝试在您的循环中打印条目当我在循环中打印条目时,我得到:{u'meds':u'11:00'}等每个条目