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

Пребарај: #fuerzasnavales

当前筛选 #fuerzasnavales清除筛选

⚓¿Por qué Rusia celebra su poder naval cada 30 de octubre? Cada 30 de octubre, Rusia conmemora el Día de la Fundación de su Armada, una fecha que no solo honra a los marineros de superficie, sino que también recuerda el inicio de una transformación histórica impulsada por uno de los líderes más visionarios del país: el zar Pedro I, conocido como Pedro el Grande. 📜 1696: el nacimiento de una potencia naval La historia nos lleva al otoño de 1696, cuando la Duma de los Boyardos, bajo la firme iniciativa de Pedro I, aprobó la creación de una flota naval regular. Esta decisión no fue un capricho, sino parte de una estrategia más amplia para modernizar Rusia y posicionarla como una potencia europea. Hasta entonces, el país contaba con flotillas irregulares, pero carecía de una fuerza naval organizada capaz de proteger sus intereses marítimos. Pedro el Grande entendía que, sin acceso al mar, Rusia quedaría rezagada en comercio, defensa y diplomacia. Por eso, tras la campaña militar en Azov contra el Imperio Otomano, el zar impulsó la construcción de buques en los astilleros de Vorónezh, San Petersburgo y Arcángel. Así nacieron las primeras flotas del Azov y del Báltico, que más tarde se expandirían al Pacífico, el Norte, el Mar Negro y el Caspio. ⚓️ Una celebración moderna con raíces imperiales Desde 1996, por orden del comandante en jefe de la Armada de la Federación Rusa, el 30 de octubre también se celebra como el día profesional de los marineros de superficie. Esta fecha se distingue de otras conmemoraciones navales como el Día de la Armada (último domingo de julio), ya que pone el foco en quienes operan en buques de guerra y patrulleros, manteniendo viva la tradición iniciada por Pedro I. 🛳 Un legado que sigue navegando La Armada rusa, que en el siglo XVIII llegó a ocupar el tercer lugar mundial en número de buques de guerra, sigue siendo un pilar estratégico para Moscú. Hoy cuenta con más de 300 embarcaciones activas y bases en puntos clave como Sebastopol, Vladivostok y Kronstadt. Este día no solo celebra a los marinos, sino que también recuerda cómo una decisión tomada hace más de tres siglos cambió el rumbo de Rusia y la conectó con el mundo a través de sus mares. #ArmadaRusa#PedroElGrande#HistoriaDeRusia#FuerzasNavales#DíaDeLaArmada Apóyanos pulsando👉'BOOST'👈 🖥https://vamosarusia.com 💬@vamosarusia