【发布时间】:2020-05-24 09:54:47
【问题描述】:
我有一个 .txt 文件,因为它是一个 json 文件。 里面有很多列表、字典、整数等,我需要从那里取出所有数字并返回它的总和。
{"e":[[{"e":86,"c":23,"a":{"a":[120,169,"green","red","orange"],"b ":"red"},"g":"yellow","b":["yellow"],"d":"red","f":-19},{"e":-47," a":[2iolet"},"c":"绿色","h":"橙色","b":{"e":59,"a":"黄色","d":"绿色" ,"c":47,"h":"红色","b":"蓝色","g":"橙色","f":["紫罗兰色",43,168,78]},"g": "橙色","f":[{"e":[82,-41,2,"红色","紫罗兰色","橙色","黄色"],"c":"绿色","a" :77,"g":"橙色","b":147,"d":49,"f":"蓝色"},-1,142,136,[":41,"f":63},11,- 20,{"e":[100,43,183],"a":"黄色","d":["橙色","黄色","紫罗兰色","黄色",143,162,-23,168,145,-33] }
这只是这个文件的一小部分。
def list_dig(lst):
tmp_int = 0
for element in lst:
if type(element) == dict:
dict_dig(element)
elif type(element) == int:
tmp_int += element
elif type(element) == list:
list_dig(element)
return tmp_int
def dict_dig(dictionary):
tmp_int = 0
for key in dictionary:
if type(dictionary[key]) == list:
tmp_int += list_dig(dictionary[key])
elif type(dictionary[key]) == int:
tmp_int += dictionary[key]
elif type(dictionary[key]) == dict:
dict_dig(dictionary[key])
return tmp_int
with open('json_written.txt', 'r') as file:
counter = 0
tmp = file.read()
for i in tmp:
if type(i) == list:
counter += list_dig(i)
elif type(i) == dict:
counter += dict_dig(i)
elif type(i) == int:
counter += i
print(counter)
我写了类似的东西,但我确定那是垃圾,因为它一直返回 0 作为计数器,我被卡住了。我该如何解决这个问题?也许我应该使用熊猫,但如果是的话 - 如何? 谢谢大家的回答
【问题讨论】:
-
您能解释一下您要求和的内容以及求和的条件是什么吗?这将有助于获得答案,谢谢!您是否也在控制数据如何写入该文件?它非常混乱/无组织,并且有一些语法错误,例如
a":[2iolet"}无效 -
你的json无效。
-
这很奇怪,因为我得到这个文件的确切任务:(...)会计软件使用一种特殊的存储格式。他们有一个 JSON 文档,其中包含各种内容:列表 ([1,2,3])、字典 ({"a":1, "b":2})、数字和字符串。您的工作是简单地找到整个文档中的所有数字并将它们加在一起。完整文件链接:pastebin.com/azc6e9fD
-
你读过关于在 Python 中解析 JSON 的文章吗?