python - Json 编写的文本文件 - 查找所有整数
问题描述
我有一个 .txt 文件,因为它是一个 json 文件。里面有很多列表、字典、整数等,我需要从那里取出所有数字并返回它的总和。
{"e":[[{"e":86,"c":23,"a":{"a":[120,169,"green","red","orange"],"b":"红色"},"g":"黄色","b":["黄色"],"d":"红色","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,"red","violet","orange","yellow"],"c":"green","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 作为计数器,我被卡住了。我该如何解决这个问题?也许我应该使用熊猫,但如果是的话 - 如何?感谢所有答案
解决方案
好的,我想我解决了一个问题。
所以 json 文件没有正确写入,所以我不得不找到其他解决方案来计算这个文件中所有整数的总和。
我决定创建一个要替换的字符列表,将所有文件视为字符串并替换 x 所有不需要的字符,然后将其拆分为 x 并删除空字段。然后我将所有字段从字符串转换为整数,最后将它们加在一起。
你有什么我可以简化的吗?
char_list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'{','}','"',':','[',']','(',')',',']
with open("skychallenge_accounting_input.txt", 'r') as file:
sky_data = file.read()
for char in char_list:
sky_data = sky_data.replace(char, 'x')
sky_list = sky_data.split('x')
while '' in sky_list:
sky_list.remove('')
for i in range(len(sky_list)):
sky_list[i] = int(sky_list[i])
print(sum(sky_list))
推荐阅读
- python - 使用 beautifulsoup 更新 html 文件中的数组
- python - 200万以下的质数
- awk - 将两个 awk 输出相加为单个输出
- java - 具有 tempFileName 属性的 Camel 2.23.1 toD(sftp) 正在为每个文件创建一个连接
- r - 在 DT 表中使用 FixedColumns 和 Buttons
- python - 运行 tkinter 程序需要帮助
- java - 如何使用for循环一个接一个地捕获所有'li'元素的屏幕截图
- python - pandas .resample() 不适用于某些示例。为什么?
- python - 如何在没有 conda 的情况下在 Windows 上安装 d2l 库?
- java - 使用用户的区域设置时用秒格式化日期和时间