Объединение и загрузка Json контента в виде python словаря - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть 100 json файлов (file1- file 100) в моем каталоге. Все эти 100 имеют одинаковые поля, и моя цель - загрузить все содержимое в один словарь или фрейм данных. В основном содержимое каждого файла (ie 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) Что-то мне не хватает? Или есть лучший способ l oop во всех 100 файлах и загрузить их как один словарь?

1 Ответ

1 голос
/ 23 апреля 2020

Если 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. Если вы хотите на go дальше номеров файлов, вы можете поместить все эти словари в другой словарь, если можете сгенерировать уникальный ключ для каждого словаря:

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") получит данные "somefield" из file1.

...