查找所有整数的Json写入文本文件

2024-06-17 12:08:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个.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":"green","h":"orange","b":{"e":59,"a":"yellow","d":"green","c":47,"h":"red","b":"blue","g":"orange","f":["violet",43,168,78]},"g":"orange","f":[{"e":[82,-41,2,"red","violet","orange","yellow"],"c":"green","a":77,"g":"orange","b":147,"d":49,"f":"blue"},-1,142,136,[":41,"f":63},11,-20,{"e":[100,43,183],"a":"yellow","d":["orange","yellow","violet","yellow",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作为计数器,我被卡住了。我怎样才能解决这个问题?也许我应该用熊猫,但如果是的话,怎么用呢? 谢谢你的回答


2条回答

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

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

使用json模块加载嵌套的dict,否则文本文件将不会被识别为dict或list,而只是一个字符串:

import json

with open("file.txt", 'r') as f:
    data = json.load(f)

现在可以使用带有isinstance的递归函数对所有整数求和:

def recursive_sum_ints(some_dict, total=0):
    for v in some_dict.values():
        if isinstance(v, int):
             total += v
        elif isinstance(v, list):
             total += sum(x for x in v if isinstance(x, int))
        else:
             total += recursive_sum_ints(v, total)
    return total

然后简单地打电话

result = recursive_sum_ints(data)
print(result)

相关问题 更多 >