TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #121 · 20 јул.

Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример). Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать? В Django по умолчанию есть готовая функция slugify для таких случаев. Но я её никогда не использую. Почему? Потому что её недостаточно! Приведём пример >>> from django.utils.text import slugify >>> slugify('This is a Title') 'this-is-a-title' Пока всё отлично >>> slugify('This is a "Title!"') 'this-is-a-title' Спец символы удалились, всё хорошо. >>> slugify('Это заголовок статьи') '' Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить >>> slugify('Это заголовок статьи', allow_unicode=True) 'это-заголовок-статьи' Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте. Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою. Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку: 🔸1. Исходный текст: >>> text = 'Мой заголовок №10 😁!' Взял специально посложней со специальными символами. 🔸2. Транслит Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги. from unidecode import unidecode >>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山") 'N S (r) u P 1/4 Yue Shan' Очень крутая библиотека, советую👍 В нашем случае получаем такое преобразование: >>> text = unidecode(text) >>> print(text) 'Moi zagolovok No. 10 !' Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы. А еще наш код уже поддерживает любой язык, будь то хинди или корейский. 🔸4. Фильтр символов Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона. >>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text) >>> print(text) 'Moi_zagolovok_No_10_' Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_". 🔸5. Slugify Осталось удалить лишние символы по краям и сделать нижний регистр >>> text = text.strip('_').lower() >>> print(text) 'moi_zagolovok_no_10' Получаем отличный slug! 😎 🌎 Полный код в виде функции. ______________ PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию. #libs#tricks#django

Резултати

Пронајдени 1 слични објави

Пребарај: #beppe

当前筛选 #beppe清除筛选
Savino Balzano

@savinobalzano · Post #738 · 05.09.2024 г., 09:16

https://x.com/SavinoBalzano/status/1831622338569236878?t=WtDVhPFG6fW8V1yLIu1y4A&s=19 Questa mattina #BeppeGrillo ha pubblicato un post straziante col quale prova a salvare l'anima del #M5S. #Grillo ricorda che certi «principi fondativi» non possono essere oggetto di negoziazione o deroga, soprattutto se si desidera che il #Movimento5Stelle resti espressione di una «politica che nasce dal basso». Devo dire che mi ha commosso perché mi appassiona ancora quest'idea di un #Movimento nel quale la gente opera dal fondo, si impegna nei comitati e nelle sezioni, fa volantinaggio, parla con la gente nei mercati e nelle fabbriche, organizza convegni e piano piano, piano piano, piano piano, arriva a ricoprire incarichi istituzionali di prestigio al fine di servire il proprio Paese con probità. E, perché no?, si può pure arrivare a Palazzo Chigi, si può pure sfiorare il Colle. Dopotutto qualcuno ci è riuscito, un «grillino», uno che era tanto affascinato dal movimentismo della prima ora e dal suo fondatore da rivolgersi a quest'ultimo riconoscendigli il titolo di «elevato»: a certificarlo fu proprio #Beppe in persona, il #garante. Parliamo di un "militante" (espressione oggi più che adeguata) che ha saputo incarnare così bene i valori genetici e fondativi del Movimento da meritare encomi pubblici, financo dall'allora Capo politico, nientepopodimeno che Vito Crimi: uno statista di tale levatura da indurci a necessitare in un futuro (assai lontano) di una revisione radicale della nostra toponomastica, tante saranno le strade, le piazze, le scuole e in generale i luoghi pubblici che saremo moralmente tenuti a dedicargli. Ebbene, Crimi restò davvero spiazzato da quel militante, così basito da cedere, abbandonandosi inebriato alla deriva in un avvolgente brodo di giuggiole: «più grillino di così non lo potevamo immaginare». E di chi parlavano il Garante e il Capo del Movimento? Di #MarioDraghi. Lo stesso #Draghi che per il rilancio dell'#UE propone meno burocrazia e fondi a iosa per i produttori di #armi. Sia chiaro, incarnando a pieno titolo lo spirito di quella zozzeria che impropriamente continuiamo a chiamare #Europa. Tante se ne potrebbero dire sul più grillino di tutti, si potrebbero scrivere enciclopedie, ma tutto è noto. Quel che si deve sottolineare è quanto impenitente possa essere una faccia di culo: non ci sono più steccati, non esistono limiti, confini oltre i quali meglio non avventurarsi. Non li ferma l'amore per il Paese e per lo Stato, il rispetto per le istituzioni, l'amor proprio, il senso del ridicolo: nulla, nulla riesce a contenerne le esternazioni più grottesche e, in questo caso credo involontariamente, comiche. Sia chiaro, l'intento non è quello di difendere chi ha il coraggio di abbracciare #Speranza, di portare l'acqua con le orecchie a #Schlein: usciamo immediatamente dall'equivoco. Lo scopo è semplicemente quello di condividere con voi il senso di smarrimento che si prova nel leggere dichiarazioni tanto assurde e surreali, presentateci come fossero di puro buon senso.