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

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

27.04.2021, 13:44. Показов 8234. Ответов 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,330
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,330
27.04.2021, 13:59
то есть скрипт не поделил строку? просили
Цитата Сообщение от Lan-cc Посмотреть сообщение
Мне надо разбить эту строчку на более менее мелкие куски
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.04.2021, 15:17
Lan-cc, а перед формированием строки ни как не разбить?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
27.04.2021, 16:15
Lan-cc, ну порезать строку -не получится, разве что регулярками по фигурным скобкам, но и то без гарантии ибо могут быть вложенные структуры. Вижу только вариант при получении строки парсить в огромный список словарей и уже оттуда читать например через генератор или отправлять по-маленьку в брокер сообщений.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 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
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru