Форум сайта python.su
0
имеется каталог в который вложнно несколько других. в каждом из клоторых находитсяпо одному или больше json файлов.
надо получить содержимое всех фаилов сформировать из них единый json обьект.
Пытаюсь так:
import json import os pathToJson = "./data" jsonData = [] tempList = "" for top, dirs, files in os.walk(pathToJson): for nm in files: with open(os.path.join(top, nm)) as f: tempList += f.read().replace('\n', '') print(tempList)
Отредактировано Areostar (Июнь 22, 2019 23:13:27)
Офлайн
221
Основная сложность в определении что именно значит это
AreostarВот какой нужен метод получения этого единого json объекта. Например в первом файлы содержимое вида
адо получить содержимое всех фаилов сформировать из них единый json обьект
{"a": [1]}
{"a": [2]}
Офлайн
0
все исходные файлы обладают одинаковой структурой
Задача слить их в один обьект и скажим запсать в общий фаил.
придётся распарсивать ручками? Быстрее неполучиться?
Офлайн
253
AreostarКонечно получится. Вы на свой код посмотрите. Вы import json выполнили. А где вы его используете? Более того, ручками не надо делать, вы легко можете получить файл неправильного формата.
Быстрее неполучиться?
AreostarКак вам правильно написали, при такой постановке задачи вы ее никогда не решите потому что нет однозначного представления что вы хотите сделать. Дополнительные обстоятельства вы вытаскиваете как фокусник из кармана. Кто на форуме знал что у них одинаковая структура? А какой смысл вы вкладываете в понятие одинаковая структура?
файлы обладают одинаковой структурой
Задача слить их в один объект
AreostarСобственно это не к нам вопрос а к вам. Нам ваш результат нравится. Если он вам не нравится, напишите почему.
как надо решать эту задачу?
>>> a=[] >>> a+=[1,2,3] >>> a [1, 2, 3] >>> a+=[1,2,3] >>> a [1, 2, 3, 1, 2, 3]
Отредактировано doza_and (Июнь 23, 2019 08:32:08)
Офлайн
857
AreostarНапиши функцию для слияния двух файлов. Потом применяй её для первого файла и второго файла. Так ты получишь слитый файл. А затем применяй эту функцию для этого слитого файла и третьего файла. Так ты получишь слитый файл. А затем применяй эту функцию для этого слитого файла и четвёртого файла. И так делаешь, пока файлы не закончатся. В конце у тебя получится один слитый файл, в котором вся информация из всех файлов.
надо получить содержимое всех фаилов сформировать из них единый json обьект.
Отредактировано py.user.next (Июнь 23, 2019 13:15:23)
Офлайн
0
И так начнём с начала:
на данный момент у меня 4 папки 21.05.2019, 23.05.2019, 27.05.2019, и 09.06.2019
и только в дыух первых лежит по одному файлику с содержимым в формате json
Делаю так:
pathToJson = "./data" folderList = [] jsonData = [] for foldername in os.listdir(pathToJson): folderList.append(pathToJson+"/"+foldername) for subFolderName in folderList: if len(os.listdir(subFolderName)) > 0: print(subFolderName) for file in os.listdir(subFolderName): handle = open(subFolderName+"/"+file, "r") data = handle.read() print(data) handle.close()
./data/21.05.2019
[
{“id”:“1”, “creation_date”:“10.06.2019 05:45:56”, “fname”:“Alen”, “lname”:“Delon”, “code”:“wa0023402333201”, “value”:“150” },
{“id”:“2”, “creation_date”:“10.06.2019 06:02:36”, “fname”:“George”, “lname”:“Otts”, “code”:“wa0024203457288”, “value”:“240” },
{“id”:“3”, “creation_date”:“10.06.2019 06:12:24”, “fname”:“Daniel”, “lname”:“Erro”, “code”:“we0005335222404”, “value”:“470” }
]
./data/21.05.2019
[
{“id”:“1”, “creation_date”:“10.06.2019 05:45:56”, “fname”:“Alen”, “lname”:“Delon”, “code”:“wa0023402333201”, “value”:“150” },
{“id”:“2”, “creation_date”:“10.06.2019 06:02:36”, “fname”:“George”, “lname”:“Otts”, “code”:“wa0024203457288”, “value”:“240” },
{“id”:“3”, “creation_date”:“10.06.2019 06:12:24”, “fname”:“Daniel”, “lname”:“Erro”, “code”:“we0005335222404”, “value”:“470” }
]
./data/23.05.2019
[
{“id”:“4”, “creation_date”:“11.06.2019 04:25:56”, “fname”:“Itan”, “lname”:“Gello”, “code”:“ws00264055674201”, “value”:“250” },
{“id”:“5”, “creation_date”:“11.06.2019 06:52:36”, “fname”:“Fridrih”, “lname”:“Ott”, “code”:“wa0766203332278”, “value”:“540” },
{“id”:“6”, “creation_date”:“11.06.2019 07:22:54”, “fname”:“Daniel”, “lname”:“Ferro”, “code”:“we0644335462404”, “value”:“670” }
]
./data/21.05.2019
[
{“id”:“1”, “creation_date”:“10.06.2019 05:45:56”, “fname”:“Alen”, “lname”:“Delon”, “code”:“wa0023402333201”, “value”:“150” },
{“id”:“2”, “creation_date”:“10.06.2019 06:02:36”, “fname”:“George”, “lname”:“Otts”, “code”:“wa0024203457288”, “value”:“240” },
{“id”:“3”, “creation_date”:“10.06.2019 06:12:24”, “fname”:“Daniel”, “lname”:“Erro”, “code”:“we0005335222404”, “value”:“470” }
]
./data/23.05.2019
[
{“id”:“4”, “creation_date”:“11.06.2019 04:25:56”, “fname”:“Itan”, “lname”:“Gello”, “code”:“ws00264055674201”, “value”:“250” },
{“id”:“5”, “creation_date”:“11.06.2019 06:52:36”, “fname”:“Fridrih”, “lname”:“Ott”, “code”:“wa0766203332278”, “value”:“540” },
{“id”:“6”, “creation_date”:“11.06.2019 07:22:54”, “fname”:“Daniel”, “lname”:“Ferro”, “code”:“we0644335462404”, “value”:“670” }
]
Офлайн
0
Так поблемму с двойным выводом решил.
Все время забываю про отступы.
Слудующий вопрос
Можно ли как нибудь улучшить этот код?(как)
А то както топорно получается! ))
Офлайн
0
вот пока решил так
pathToJson = "./data" folderList = [] jsonData = [] for foldername in os.listdir(pathToJson): folderList.append(pathToJson+"/"+foldername) for subFolderName in folderList: if len(os.listdir(subFolderName)) > 0: for file in os.listdir(subFolderName): handle = open(subFolderName+"/"+file, "r") data = json.loads(handle.read()) for record in data: jsonData.append({"creation_date":record["creation_date"], "fname":record["fname"], "lname":record["lname"], "code":record["code"], "value":record["value"]}) handle.close() print(jsonData) newJson = json.dumps(jsonData) print(newJson)
Офлайн
253
AreostarВ некоторых аспектах ваш код выглядит как пособие о том как не надо делать.
Можно ли как нибудь улучшить этот код?(как)
folderList = [] jsonData = [] for foldername in os.listdir(pathToJson): folderList.append(pathToJson+"/"+foldername) for subFolderName in folderList: .....
from pathlib import Path for i in Path("data").glob("**/*.*"): ....
{"creation_date":record["creation_date"], "fname":record["fname"], "lname":record["lname"], "code":record["code"], "value":record["value"]}
record
data = json.loads(handle.read()) for record in data: jsonData.append(record)
jsonData+=data
handle = open(subFolderName+"/"+file, "r") data = json.loads(handle.read()) handle.close()
with open(i,"r") as f: data = json.load(f)
Отредактировано doza_and (Июнь 24, 2019 23:27:09)
Офлайн
0
Спасибо за обьяснение
только вот:
data = json.loads(handle.read()) for record in data: jsonData.append(record)
Офлайн