Python Разделить каждый файл JSON каждые 4,5 МБ - PullRequest
0 голосов
/ 19 декабря 2018

Я довольно новичок в питоне.У меня есть около 21 JSON-файлов для отправки с запросом POST.К сожалению, служба, которой я пытаюсь отправить эти файлы (Qualtrics), принимает только размер файла до 5 МБ.С учетом сказанного мне нужно разделить эти файлы JSON каждые 4,5 МБ (просто чтобы быть уверенным).Этот скрипт Python является частью потока данных, поэтому, если он завершится ошибкой, следующие шаги не будут выполнены.

Итак, что у меня есть сейчас и что делает мой скрипт:

  • Из CSV конвертировать в JSON
    • Формат JSON: [{"key1": "value", "key2": "value", ...}, {...}]
  • Отправьте запрос POST с этим JSON.
    • Сценарий завершается ошибкой, если размер файла> 5 МБ.

Я уже пытался найти решение, но мне не повезло.Мне удалось разделить CSV, но поскольку 2-МБ CSV превращается в 5,5 МБ JSON, я не могу быть полностью уверен.

У вас есть какие-нибудь предложения?Еще одна вещь, которая меня блокирует, это то, что, так как я работаю на сервере Linux, который не является моим, у меня нет разрешения на установку дополнительных библиотек, и даже если я прошу об этом, я получаю НЕТ в качестве ответа ...

Большое спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Предполагая, что ваш JSON представляет собой массив объектов, подобных этому:

[
   {"key1: "value1", "key2: "value2", ....},
   ...
   {"key1: "value1", "key2: "value2", ....}
]

Тогда вы можете построить свою полезную нагрузку вручную следующим образом:

def send_entries(entries):
   payload = '[' + ','.join(entries) + ']'
   send_entries(payload)

json_entries = []
total_size = 0

for line in csv:
    json_entry = converto_to_json(line)
    json_entries.append(json_entry)
    total_size += len(json_entry)
    if total_size >= 4_500_000:
        send_entries(json_entries)
        total_size = 0
        json_entries = []

if json_entries:
    send_entries(json_entries)

Фактический размер полезной нагрузки можетбыть немного больше, чем 4.5Mb, но если каждая запись в вашем CSV меньше 500Kb, с вами все будет в порядке.

...