akelsey
@akelsey

Как убрать переносы строки в unicode?

Станадртные методы не удаляют до конца.

В кратце ситуация, из elasticsearch библиотекой забираю определенный документ, с определенной структурой, который мне нужно переделать. Т.е. эти строки уже лежат в Elastic и я ожидаю что не нужно будет с ними возится, но по странной, даже непонятной мне причине, стандартная библиотека - не экранирует кавычки, вместо полей в кавычках массивы в JSON возвращает с апострофами, т.е. например:
{
"lastname": "Иванов",
"education": [
'пту №1',
'университет патрисы лумумбы'
],
"hobbies": "Люблю вышивать "крестиком" и 
вязать на спицах"
}


с кавычками частично справился,
нарисовал тупую функцию (внимание побочка! у перфекционистов могут закровоточить глаза):
def filter(mystr) -> str:
    mystr = str(mystr)
    mystr = mystr.replace('\r\n', u' ')
    mystr = mystr.replace('\r', u' ')
    mystr = mystr.replace('\n', u' ')
    mystr = mystr.replace('\\r', u' ')
    mystr = mystr.replace('\\n', u' ')
    mystr = mystr.replace('\\r\\n', u' ')
    mystr = mystr.replace('\'', u'"')
    mystr = mystr.replace('\"', u'\\\"')
    mystr = mystr.replace(u'True', u'true')
    mystr = mystr.replace(u'False', u'false')
    mystr = mystr.replace(u'None', u'null')
    re.sub('^\s+|\n|\r|\s+$', u'', mystr)
    return str(mystr)


Она частично работает, но из 100 документов в 5 пропускаются строки с переносом.
Глянул в hex строчку с переносом (между "и" & "в":
5ff0cc7a8a3c6548680141.png
я вижу 0xD 0xA которые вроде должны были убиться функцией, но они там остаются, но в юникоде же это должно быть 0x000D и 0x000A если не ошибаюсь. (т.е. сами символы закодированы верно 0xD0B8 & 0xD0B2). Или это ок для UTF-8?
Есть ли какой стандартный метод или функция или библиотека, которой можно скормить JSON для bulk в elasticsearch, что бы она обошла все значения рекурсивно значения ключей и всё сделала "зашибись".
Спасибо.
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@teenager_python
Регуляркой:
import re

mystr = " balabla\n zzz "

re.sub("^\s+|\n|\r|\s+$", '', mystr)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы