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

Резултати

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

Пребарај: #void

当前筛选 #void清除筛选
雨声

@ameisbest · Post #3407 · 03.04.2026 г., 15:35

Dedication #Doujin#A198#Void#Diverse_System 🗺 Album: AD:PIANO Ⅲ 🗺 Release Date: 2014-12-30 🗺 Composer: Void 推这首是因为DS社团刚刚公布了AD:PIANO X的一般公募的合格名单,然后顺便点名表扬了某位"とんでもねえ奴"。 推特原文大意: 我(主催YsK439)觉得这应该是 Diverse 长达 20 年左右的公募历史上头一遭:当时我发去了邀请,大概是因为对方腾不出时间或者太忙了,一直没回音。我当时还想:“唉,看来是太忙了,真可惜。”结果万万没想到,有个胆大包天的家伙,居然在公募截稿前的最后一刻直接杀进来了。 没错,说的就是你 (这里@了Void)。 我当时真是惊呆了,心想这到底是什么情况?后来核实了一下,原来是他后来又有空了,但觉得已经过了回复期限不好意思再联系,干脆就直接走公募渠道投了稿。这剧情也太棒了吧!我当时就想“行,那我一定好好评审”,结果这家伙确实实力强悍,轻轻松松就过关了。 最后的结果就是:他亲手夺回了那个本就为他预留的席位。 这并没有占用公募的合格名额,无论有没有这件事,名额本来就在增加。 个人来说,这操作太帅了。而且这种有点笨拙的感觉正好是我很喜欢的类型,说实话真的挺开心的。谢谢你。 *AD:PINAO是选拔制度,Void是直邀并预留席位。 *时隔多年的ADPX作为DS社团最激烈的战斗,真的可以期待一下。 📕VGMdb