首页 > 解决方案 > Json 编写的文本文件 - 查找所有整数

问题描述

我有一个 .txt 文件,因为它是一个 json 文件。里面有很多列表、字典、整数等,我需要从那里取出所有数字并返回它的总和。

{"e":[[{"e":86,"c":23,"a":{"a":[120,169,"green","re​​d","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 作为计数器,我被卡住了。我该如何解决这个问题?也许我应该使用熊猫,但如果是的话 - 如何?感谢所有答案

标签: pythonarraysjson

解决方案


好的,我想我解决了一个问题。

所以 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))

推荐阅读