Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 11.02.2021
Сообщений: 13

Как разделить строку json на куски?

27.04.2021, 13:44. Показов 8040. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый, есть sql запрос, он выводит строчку в json формате, например
Code
1
[{"Id":35079,"Type":10,"Date":"2021-01-08T08:21:00","Success":false,"QRCodeInfoId":29,"QRCodeInfoType":10},"Id":100,"Name":"Учреждение"},{"Id":101,"Name":"Организация"}]
Строчка огромная, более 1гб с разными полями.
Мне надо разбить эту строчку на более менее мелкие куски что бы передать в брокер сообщений через цикл, а не сразу одним сообщением.
Пробовал через chunks, но он делит по количеству символов в строке, а надо что бы считал по количеству {}, например каждые 10 тысяч записей и делил.
Причём каждая новая строка должна быть формата [{тут 10 тысяч записей через запятую}]
Иначе json не распарсится.

Что то никак не соображу как сделать подобное.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2021, 13:44
Ответы с готовыми решениями:

Как разделить текст на куски в эдиторе билдера?
Добрый день форумчани. Вопрос как произвести перенос следующего предложения: String findName7 ="Об утверждении Правил отнесения...

Разделить огромный txt файл на куски и поместить в различные книги excel
Здравствуйте, уважаемые форумчане! У меня есть огромный файл txt, который нужно разделить на части и эти части поместить в книги excel....

Разбить переменную на куски, вывести куски в файл в отдельные строки
Добрый день. Затупил, прошу помощи. Есть переменная, в которую запихиваем произвольное количество путей к папкам c разделителем...

8
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,318
27.04.2021, 13:49
по теме
Python
1
2
3
4
5
6
import json
jsn = '{"time": 1618977514201, "price": "0.31350000", "quantity": "127.00000000"}'
list_val = list(json.loads(jsn).values())
list_keys = list(json.loads(jsn).keys())
print(list_val, len(list_val))  # => [1618977514201, '0.31350000', '127.00000000'] 3
print(list_keys, len(list_keys))  # => ['time', 'price', 'quantity'] 3
0
0 / 0 / 0
Регистрация: 11.02.2021
Сообщений: 13
27.04.2021, 13:54  [ТС]
Не совсем понял как это связанно с моей темой, мне не нужно разделять значения и свойства, а только поделить на куски на более мелкие, может чего не понял.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,318
27.04.2021, 13:59
то есть скрипт не поделил строку? просили
Цитата Сообщение от Lan-cc Посмотреть сообщение
Мне надо разбить эту строчку на более менее мелкие куски
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.04.2021, 15:17
Lan-cc, а перед формированием строки ни как не разбить?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
27.04.2021, 16:15
Lan-cc, ну порезать строку -не получится, разве что регулярками по фигурным скобкам, но и то без гарантии ибо могут быть вложенные структуры. Вижу только вариант при получении строки парсить в огромный список словарей и уже оттуда читать например через генератор или отправлять по-маленьку в брокер сообщений.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.04.2021, 17:29
Lan-cc, наивный вопрос - а поменьше кусочек из вашей sql никак не получить? Чем потом мучиться парсить.
0
0 / 0 / 0
Регистрация: 11.02.2021
Сообщений: 13
27.04.2021, 17:35  [ТС]
По порядку, получать кусками из sql запроса не особо вариант, база умрёт выполнять такое количество запросов, там хранилка будет постоянно выполняться.

Мне знакомый помог. Сам не понимаю до конца этот код, но работает. Разбивает всё как нужно.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def divide_chunks(l, n):
      
    for i in range(0, len(l), n): 
        yield l[i:i + n]
 
lst_message = cursor.fetchall()
 
str1=''
 
for item in lst_message:
  for item1 in item:
    str1=str1+item1
 
 
str_message = str1.replace('][',',')
 
chunks = str_message.split('},{')
 
chunks[0] = chunks[0][1:] + "}"
chunks[-1] = "{" + chunks[-1][:-1]  
 
 
 
for i, elem in enumerate(chunks[1:-1]):
  chunks[i] = "{" + elem + "}"
 
x = list(divide_chunks(chunks, 10000))
 
 
credentials = pika.PlainCredentials(log, passw)
parameters = pika.ConnectionParameters(host = ser, credentials = credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.queue_declare(queue='ScheduleLoad', durable=True)
 
for message in x:
    str_rabbit = ''
    for item in message:
        str_rabbit = str_rabbit + item + ","
 
    str_rabbit = "[" + str_rabbit[:-1] + "]"
        
    channel.basic_publish(exchange='',
                          routing_key='ScheduleLoad', 
                          body=str_rabbit)
    print(" [x] Sent 'Запрос отправлен в очередь rabbitmq'")
connection.close()
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.04.2021, 19:42
Lan-cc, ну, хозяин-барин, конечно...
1. Вопрос "разбивать вручную или парсить". Тут у вас явно самостоятельная разбивка. Наверняка она работает быстрее цивильного парсинга. Но, как всё самописное на коленке, чревато ошибками.
2. Вопрос "получать один большой кусок или несколько мелких".
Цитата Сообщение от Lan-cc Посмотреть сообщение
получать кусками из sql запроса не особо вариант, база умрёт выполнять такое количество запросов, там хранилка будет постоянно выполняться.
Ничего подобного, разницы практически никакой. Основная нагрузка для базы - это выдать результат. Но даже то, как база получает даные внутри себя - выполнение запроса означает проход по таблице. Пройти за один раз 1 гб или 100 раз по 10 гб - разницы практически никакой. Разве что накладные расходы на запуск, но это мизер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2021, 19:42
Помогаю со студенческими работами здесь

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

Как разделить строку
Как можно разделить такую переменную- m = elektronnaya@mail.rupochta@yandex.comsila@gmail.com Что-бы получилось вот так- m =...

Как разделить строку?
Как разделить строку на две строки по определенному разделителю (любой символ ASCII) не игнорируя знаки препинания? К примеру есть...

Как разделить строку на 6 частей
Имеется на выходе строка неопределенного размера + символов перевод строки. Нужно при помощи Python разделить ее на 6 частей? спасибо

Как разделить текстовую строку
Здравствуйте, есть строка, например: ljkhhuIUYyhiygYGY765877...............................................и т.д. Строка больше 500...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru