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 слични објави

Пребарај: #russiebolivie

当前筛选 #russiebolivie清除筛选
Ambassade de Russie au Burkina Faso

@russie_burkinafaso · Post #645 · 23.01.2026 г., 19:48

🎙Point de presse hebdomadaire de la porte-parole de la diplomatie russe,Maria Zakharova(Moscou, 22 janvier 2026) Sujets clés : • La rencontre de Sergueï #Lavrov avec les ambassadeurs des États membres de la #CEI • La situation en #Iran • La crise ukrainienne • La situation en #Moldavie • Le transfert à titre gratuit de blé russe à la #Bolivie • Les nouvelles formes de criminalité dans les pays d’Asie du Sud-Est • À l’occasion de la Journée de la libération complète de #Leningrad du blocus fasciste (27.01.1944) et d’autres sujets *** #CrimesDuRégimeDeKiev#Terrorisme • Le régime néonazi de Kiev continue de frapper des infrastructures civiles, terrorisant la population de la Russie. Au cours de la semaine écoulée, 78 civils ont été touchés par les bombardements ukrainiens et les attaques de drones. Parmi eux, 14 personnes ont été tuées et 72 blessées, dont trois enfants. ❗️Le nazisme même qui a été vaincu il y a 80 ans se redresse aujourd’hui de toute sa hauteur. Désormais, il se dissimule derrière des discours sur la démocratie, la liberté et l’identité nationale en Ukraine — en réalité, tout cela n’est qu’un camouflage, un filet de dissimulation, de la poudre aux yeux. #Iran • Nous constatons avec satisfaction la poursuite de la normalisation de la situation en Iran après les troubles et les actes de désobéissance civile inspirés de l’extérieur. • Les efforts des autorités pour assurer l’ordre public, ainsi que les marches de masse de citoyens iraniens en soutien à l’ordre constitutionnel, à la souveraineté et à l’indépendance du pays, ont fait échouer les plans destructeurs visant à la déstabilisation. • Ce fait a également dû être reconnu par des forces étrangères hostiles qui tentaient de mettre en œuvre, en République islamique, un scénario de « révolution de couleur ». Le sang versé dans les rues iraniennes est sur leur conscience. • Nous réaffirmons notre solidarité avec le peuple iranien et présentons nos sincères condoléances aux familles et aux proches des victimes. #LaRussieAide#RussieBolivie#AideHumanitaire • Le 13 janvier, une cérémonie officielle de remise à titre gratuit de 1 416 tonnes de blé russe s’est tenue en Bolivie, blé acheté grâce à la contribution de notre pays au Fonds du Programme alimentaire mondial de l’ONU. • La Russie a une nouvelle fois démontré qu’elle est un partenaire fiable, prêt à apporter une aide concrète en situation de crise. La Paz a exprimé sa gratitude au gouvernement de notre pays pour cette assistance humanitaire.