Прочитайте файл Json размером 5 ГБ с похожими объектами json в каждой строке и разделите их на несколько файлов json.Python

Программы на Python
Гость
Прочитайте файл Json размером 5 ГБ с похожими объектами json в каждой строке и разделите их на несколько файлов json.

Сообщение Гость »


У меня есть файл JSON с несколькими объектами JSON. Нам нужно разделить файл на несколько файлов json с правильным форматом и настраиваемым размером фрагмента.
Я попробовал приведенный ниже код, и получение количества записей в файле занимает больше времени. .
Общее время, затраченное на каждый файл, составляет около 18 минут. Нужно сократить время. Ниже приведен пример данных.
Ввод:

Код: Выделить всё

{"job": "developer"}
{"job": "taxi driver"}
{"job": "police"}
Вывод

Код: Выделить всё

{
"ROOT": [
{
"job": "developer"
},
{
"job": "taxi driver"
},
{
"job": "police"
}

Код, который я пробовал, требует больше времени для получения длины записи.

Код: Выделить всё

import os
import json
import glob
import time
import shutil
start = time.time()

def filesplit(fInputname,farchivedir,foutdir):
File_Extension = '.json'

# using partition()
# String till Substring
x=foutdir.find(File_Extension)
res=foutdir[0:x]
with open(fInputname, 'r', encoding='utf-8') as f1:
ll = [json.loads(line.strip())  for line in f1.readlines()]

#Total number of records in the input json file
print(len(ll))

#50000 means we getting splits of 50000 json objects
size_of_the_split=50000
total = len(ll) // size_of_the_split

#Number of files getting generated
print(total+1)
for i in range(total+1):
jsonData=ll[i * size_of_the_split:(i + 1) * size_of_the_split]
json.dump( {'ROOT': jsonData}, open(res + "_" + str(i+1) + ".json", 'w',encoding='utf8'), ensure_ascii=False, indent=True)
shutil.move(fInputname,farchivedir)

for name in glob.glob("C:\\Users\\JSON\\Input\\*.json"):
print(name)
filesplit(name, name.replace('C:\\Users\\JSON\\Input','C:\\Users\\JSON\\OriginalFiles_BKP'),name.replace('C:\\Users\\JSON\\Input','C:\\Users\\JSON\\Output'))

end = time.time()
print('completed')
print("The time of execution of above program is :",
(end-start) * 10**3, "ms")


Источник: https://stackoverflow.com/questions/781 ... m-to-multi

Вернуться в «Python»