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

Резултати

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

Пребарај: #praktikpro

当前筛选 #praktikpro清除筛选

⚡️Старт Первого тура BetBoom PAL2025 по традиции вместе с LIVE REPORTS!⚡️ 📺Смотреть на YouTube 📺Смотреть на RuTube 📺Смотреть на VKВидео 🧢А еще Денис Михайлович рассказал про розыгрыш кепки от Harlovs🔥 📣Чат для болельщиков 🥳Приглашаем зрителей в Фан-зону #BetBoomPAL#АльфаБанк#ЯндексМаркет#Grundens#Rybomania#DapDrift#VINOGRADFISHING#Decoy#МирОхотыИРыбалки#PraktikPRO

⚡️ПРЯМАЯ ТРАНСЛЯЦИЯ 2 тура 1 этапа BetBoom PAL 2025⚡️ Друзья, сегодня с 9-30 утра по Московскому времени начнётся прямая трансляция 2 тура 1 этапа BetBoom PAL 2025! Нас ждёт просто фантастическая схватка в формате, который приблизит вас к спортсменам как никогда раньше: ✅Камеры прямой трансляции в лодках 7 экипажей 📌Арестов - Словецкий 📌 Мычко - Юрганов 📌 Русяев - Диденко 📌 Румянцев - Морозов 📌 Чичерин - Петков 📌 Федоров - Селиванов 📌 Сазанов - Котов ✅ Мощнейший комментаторский состав в студии: дуэт Владимира Иноземцева и Вадима Гиндина. ✅ К ним присоединится профессионал своего дела – Александр Волынкин. Это будет драйвово, напряженно и захватывающе. Настраивайте будильники — начало в 9:30 по московскому времени (в 11:30 по пермскому). Не пропустите! 🗓 Дата: 27 августа ⏰ Время: с 9:30 (мск) 📍 Где смотреть: 👉Сообщество турнира ВКонтакте 👉YouTube-канал 👉RuTube-канал 📺Телеканале "Диалоги о рыбалке" 📣Чат для болельщиков 🥳Приглашаем зрителей в Фан-зону ✔️Скидка 15% по промокоду PAL15 интернет-магазинах Рыбомания и AvidAngler ✔️Скидки до 60% на товары для рыбалки и активного отдыха на Яндекс Маркете! Ознакомиться со списком товаров можно по ССЫЛКЕ ✔️Скидка по промокоду PAL5 в интернет-магазине VINOGRAD FISHING #BetBoomPAL#BetBoom#АльфаБанк#ЯндексМаркет#Grundens#Rybomania#DapDrift#VINOGRADFISHING#Decoy#МирОхотыИРыбалки#PraktikPRO

⚡️АНОНС ПРЯМОЙ ТРАНСЛЯЦИИ⚡️ Друзья, завтра с 9-30 утра по Московскому времени начнется Прямая трансляция 1 тура Первого этапа PAL 2024! Камеры в лодках экипажей: 👉Мычко - Юрганов 👉Питерцов - Елисеев 👉Фёдоров - Селиванов 👉Арестов - Словецкий 👉Пыстогов - Утробин 👉Сазанов - Котов (камера Генерального спонсора турнира - MaxFishing) Процесс в студии комментируют Владимир Иноземцев и Вадим Гиндин. К ним присоединятся Владимир Гирбасов и Александр Волынкин Прямая трансляция будет вестись на Телеканале "Диалоги о рыбалке" Не пропустите самое жаркое рыболовное событие августа! #PAL2024#PAL2024_1этап#MaxFishing#VinogradFishing#Frapp#Okuma#Zetrix#Grundens#Daiwa#PraktikPRO#РыбанутыеРФ#МирОхотыИРыбалки#Decoy#Rybomania#диалогиорыбалке#филин#деев