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

Пребарај: #greciaindependiente

当前筛选 #greciaindependiente清除筛选

🚢⚔️ La Batalla de Navarino: Rusia y el nacimiento de Grecia moderna Hace casi dos siglos, el 20 de octubre de 1827, se libró una de las batallas navales más decisivas del siglo XIX: la Batalla de Navarino. En las aguas de la bahía homónima, frente a la costa suroeste del Peloponeso, las flotas de Rusia, Reino Unido y Francia enfrentaron a la armada otomano-egipcia en un choque que sellaría el destino de Grecia y marcaría un punto de inflexión en la geopolítica europea. 📜 Contexto histórico Grecia llevaba casi 400 años bajo dominio otomano. Sin embargo, el siglo XVIII trajo consigo el debilitamiento del Imperio Otomano y el ascenso de Rusia como potencia ortodoxa. Catalina II, con su visión imperial, impulsó la idea de restaurar Bizancio en los Balcanes, fundando ciudades con nombres griegos en el Mar Negro como Jersón, Odessa y Sebastopol. Incluso nombró a sus nietos con nombres helénicos: Alejandro, Nicolás y Constantino. En 1821, estalló la Revolución Griega en el Peloponeso, tierra de antiguos espartanos. Aunque el zar Alejandro I se mostró prudente, preocupado por el equilibrio europeo tras las guerras napoleónicas, su sucesor Nicolás I no pudo ignorar la brutal represión otomana contra los cristianos ortodoxos. Rusia, junto a Francia y Reino Unido, decidió intervenir. ⚓️ La batalla El 5 de octubre de 1827, la flota aliada llegó a Navarino. Los almirantes rusos Lodewijk van Heyden y Mijaíl Lazarev presionaron por una acción directa, mientras los británicos preferían una postura defensiva. Finalmente, el 20 de octubre, las flotas aliadas —27 barcos con 1302 cañones— entraron en la bahía, enfrentándose a 57 naves turco-egipcias con 2100 cañones. La posición otomana parecía ventajosa, protegida por baterías costeras. Pero su flota quedó atrapada en un espacio reducido, mientras los aliados controlaban la única salida. El buque ruso "Azov" se destacó al enfrentarse a cinco enemigos simultáneamente, logrando destruir el buque insignia egipcio. En apenas tres horas, la flota otomano-egipcia fue aniquilada. Los aliados no perdieron ningún barco, aunque sufrieron 175 muertos y 487 heridos. El enemigo, en cambio, perdió cerca de 7.000 hombres. 🎯 Consecuencias La victoria en Navarino fue clave para que el Imperio Otomano reconociera la independencia de Grecia en 1830. Rusia, por su parte, consolidó su influencia en los Balcanes y el Cáucaso, reafirmando su papel como defensor de los pueblos ortodoxos. Esta intervención también marcó el inicio de una nueva era en la diplomacia europea, donde las potencias comenzaban a actuar en bloque para moldear el mapa político del continente. 🗣 En palabras del historiador ruso Serguéi Peresleguín, “Navarino fue más que una batalla naval: fue una declaración de principios de Rusia como potencia protectora de los pueblos cristianos del sudeste europeo”. #HistoriaRusa#GreciaIndependiente#BatallaDeNavarino#ImperioOtomano#CulturaOrtodoxa Apóyanos pulsando👉'BOOST'👈 🖥https://vamosarusia.com 💬@vamosarusia