python3 textwrap неожиданный вывод в формате json? - PullRequest
0 голосов
/ 13 февраля 2020
>>> a = '{"key1": "aaaaaaaaaaaaaaaaa", "key2": "bbbbbbbbbbbbbbbbbbbbbbbb"}'
>>> len(a)
64
>>> textwrap.wrap(a, 32, drop_whitespace=False)
['{"key1": "aaaaaaaaaaaaaaaaa", ', '"key2": ', '"bbbbbbbbbbbbbbbbbbbbbbb"}']

Я ожидал

['{"key1": "aaaaaaaaaaaaaaaaa", "k', 'ey2": "bbbbbbbbbbbbbbbbbbbbbbb"}']

Я что-то упустил?

1 Ответ

0 голосов
/ 13 февраля 2020

Ваше ожидание неверно, согласно официальной документации :

Переносит один абзац в текст (строку), поэтому каждая строка имеет длину не более ширины символов. Возвращает список выходных строк без заключительных символов новой строки.
[...]
Текст предпочтительно переносится в пробелах и сразу после дефиса в переносимых словах; только тогда длинные слова будут разбиты при необходимости, если только TextWrapper.break_long_words не установлено в false.

Ваш ожидаемый вывод буквально прерывается после 32 символов, тогда как фактический вывод разбивается на сегменты по 30, Длина 8 и 27 символов - прерывается только на пробельные символы в исходной строке.

Второй сегмент намного короче, чем остальные, потому что первая строка плюс следующий цикл без пробелов "key2": длиннее, чем 32 символа, и этот короткий плюс плюс следующая фраза также длиннее 32 символов. Только когда нет абсолютно никакой возможности разбить пробел или дефис, произойдет разрыв в середине пробела без пробелов.

...