如何从序列化文件加载json数据并在Python3中处理它们?

如何从序列化文件加载json数据并在Python3中处理它们?,python,python-3.x,Python,Python 3.x,我正在尝试用python3(MacOSX)和tkinter创建一个程序。它采用增量id、datetime.now和第三个字符串作为变量。比如说, 将打开一个窗口,显示:id/date-time/“hello-world”。用户做出选择并按下保存按钮。输入被序列化为json并保存在文件中 mytest = dict([('testId',testId), ('testDate',testDate), ('testStyle',testStyle)]) with open('data/test.tx

我正在尝试用python3(MacOSX)和tkinter创建一个程序。它采用增量id、datetime.now和第三个字符串作为变量。比如说,

将打开一个窗口,显示:id/date-time/“hello-world”。用户做出选择并按下保存按钮。输入被序列化为json并保存在文件中

mytest = dict([('testId',testId), ('testDate',testDate), ('testStyle',testStyle)])
with open('data/test.txt', mode = 'a', encoding = 'utf-8') as myfile:
     json.dump(mytest, myfile, indent = 2)
myfile.close()
文件中的结果是

{
  "testStyle": "blabla", 
  "testId": "8", 
  "testDate": "2013-05-09 13:32"
}{
  "testDate": "2013-05-09 13:41", 
  "testId": "9", 
  "testStyle": "blabla"
}

作为一名python新手,我想加载文件数据并进行一些检查,比如“如果用户在2013-05-09再次输入,则显示一条消息,说明您已经输入了今天的数据。”加载所有这些json数据的正确方法是什么?该列表将每天扩展,并将包含大量数据

您可以存储字典列表,而不是直接存储字典,这些字典可以加载回可以修改和附加到的列表中

import json
mytest1 = dict([('testId','testId1'), ('testDate','testDate1'), ('testStyle','testStyle1')])
json_values = []
json_values.append(mytest1)
s = json.dumps(json_values)
print(s)
json_values = None
mytest2 = dict([('testId','testId2'), ('testDate','testDate2'), ('testStyle','testStyle2')])
json_values = json.loads(s)
json_values.append(mytest2)
s = json.dumps(json_values)
print(s)

您只需加载文件并对其进行解析:

with open(path, mode="r", encoding="utf-8") as myfile:
    data = json.loads(myfile.read())
现在,您可以随心所欲地处理
数据


如果你的文件真的很大,那么我想你应该使用一个合适的数据库来代替。

with
语句在退出
with
块时关闭你的文件,
myfile.close()
是多余的。很高兴知道这一点,感谢您的提示,我的下一步将是使用数据库部署它。但是考虑到您建议的解析文件的默认方式,我如何扫描和检查数据本身呢?我的意思是,每个json条目都必须是一个“行”或一个单独的条目,因此我可以说如果date time==已经存在,那么就获取该条目的json数据并打印它们。@RobertoDelgazzo哦,对了,您没有使用json格式(我的错误是,您将json字符串附加到彼此,但组合的不是json)。加载数据不会那么容易。你应该听从希亚姆的回答。但更重要的是:你正试图重新发明轮子。您可以简单地在数组上循环并搜索date-time-exists条目,但这根本没有效率。与其这样做,不如使用sqlite?这是一个内置于Python中的数据库,不需要任何数据库服务器。我不明白为什么这会如此复杂。当然,我根本不想重新发明轮子,但我认为将字典数据转换为json并保存它们很容易,然后将它们加载回json并将其转换为字典。我可以创建一个字典列表吗?最后,我不知道这是否是一个解决方案,但我按照您的建议使用sqlite db。有一些PHP/MySQL编程经验,我知道如何处理基本的sql命令,但我不知道这会这么容易@罗伯特·德尔加佐是的,这并不复杂。实际上,当您想手动执行时(就像您尝试过的那样),它会更复杂