【问题标题】:Combining and loading Json content as python dictionary将Json内容组合并加载为python字典
【发布时间】:2020-08-06 08:47:58
【问题描述】:

我的目录中有 100 个 json 文件(file1-file 100)。所有这 100 个都有相同的字段,我的目标是将所有内容加载到一个字典或数据框中。基本上每个文件的内容(即 file1-file100)将是我的字典或数据框的一行

为了首先测试代码,我编写了一个脚本来从一个 json 文件中加载内容

file2 = open(r"\Users\sbz\file1.txt","w+")
import json
import traceback

def read_json_file(file2):
    with open(file2, "r") as f:
        try:
            return json.load(f)

为了结合我写了这个

def combine_dictionaries(dictionary_list):
    my_dictionary = {}
    for key in dictionary_list:
        my_dictionary.update(key)
    return my_dictionary

我无法使用 print(file2) 加载文件或显示字典内容 有什么我想念的吗?还是有更好的方法来循环所有 100 个文件并将它们作为单个字典加载?

【问题讨论】:

  • 请描述 (1) 你如何调用这些函数,以及 (2) 究竟什么不起作用,以及如何。

标签: json python-3.x python-2.7 dataframe dictionary


【解决方案1】:

如果json.load 不起作用,我猜你的 JSON 文件可能格式不正确。尝试让它与一个简单的文件一起工作,例如:

{
  "test": 0
}

之后,尝试加载 100 个文件中的一个。我复制粘贴了你的 read_json_file 函数,我可以看到我文件中的数据:print(read_json_file("data.json"))

循环遍历文件并合并它们: 看起来您的 combine_dictionaries 功能还没有 100% 完成您想做的事情。 update 不会根据需要将字典合并到行中;它将用另一个字典的键替换一个字典的键,并且由于每个文件具有相同的字段,因此生成的字典将是列表中的最后一个。从技术上讲,字典列表已经是您想要的行列表,您可以根据行号索引列表,例如,list_of_dictionaries[0] 将获取从 file1 创建的字典,如果您按 file1 的顺序填充列表到文件 100。如果您想比文件编号更进一步,您可以将所有这些字典放入另一个字典中,前提是您可以为每个字典生成唯一键:

def combine_dictionaries(dictionary_list):
    my_dictionary = {}
    for dictionary in dictionary_list:
        my_dictionary[generate_key(dictionary)] = dictionary
    return my_dictionary

generate_key 是一个函数,它将返回该字典唯一的键。现在combined_dictionary.get(0) 将获得file1 的字典,combined_dictionary.get(0).get("somefield") 将从file1 中获得“somefield”数据。

【讨论】:

  • 我意识到这是文件格式的问题,因为我使用较小的 json 文件快速澄清:如果我想将此打印的字典保存为数据框或保存为字典变量,我该如何打印( read_json_file("data.json")).
  • 我已经有一段时间没有真正使用数据帧了,所以我不确定这种方式,但是对于普通字典,我很确定你可以使用 json 模块将字典转换为json 字符串与 json.dumps(some_dictionary) 然后你可以将字符串写入文件。
猜你喜欢
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多