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

Резултати

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

Пребарај: #ojoaldato

当前筛选 #ojoaldato清除筛选
Misterchip

@Misterchip2010 · Post #38247 · 20.05.2023 г., 18:08

#OJOALDATO - Lázaro Vinícius ha logrado el SEGUNDO hat-trick para un club de la ciudad de Almería en TODA la historia de La Liga. El primero lo hizo Antonio Guzmán Núñez para la Agrupación Deportiva Almería contra el Salamanca, el 21 de diciembre de 1980. 0 hat-tricks en la… https://t.co/EJvIkWgRz9

Hashtags

Misterchip

@Misterchip2010 · Post #38164 · 16.05.2023 г., 22:08

#OJOALDATO - El Inter ha llegado a la final de la Copa de Europa manteniendo su portería a cero en 5 de los 6 partidos de eliminación directa (sólo concedió algún gol en el encuentro de vuelta de 1/4 contra el Benfica), algo que no lograba ningún equipo desde 2016 (Real Madrid).

Hashtags

Misterchip

@Misterchip2010 · Post #38152 · 14.05.2023 г., 22:10

#OJOALDATO - Al Barcelona le ha tocado celebrar La Liga fuera de casa en 10 de sus últimos 12 alirones: Mendizorroza (1999) Ciutat de Valencia (2005) Balaidos (2006) Son Moix (2009) Camp Nou (2010) Ciutat de Valencia (2011) Vicente Calderón (2013) Vicente Calderón (2015) Nuevo… https://t.co/Borf98ueLR

Hashtags

Misterchip

@Misterchip2010 · Post #38147 · 14.05.2023 г., 22:10

#OJOALDATO - @JoseluMato9 es el primer jugador en la historia del Espanyol que le marca al Real Madrid y al Barcelona en casa y fuera en una misma edición de La Liga. En los últimos 70 años sólo lo habían logrado 5 jugadores (de cualquier equipo): Enrique Morán con el Betis en… https://t.co/XvcMENjOdHhttps://t.co/AxAc4WJrgK

Hashtags

Misterchip

@Misterchip2010 · Post #38144 · 14.05.2023 г., 21:08

#OJOALDATO - Lewandowski es el QUINTO jugador en la historia del Barça que marca 30+ goles (en todas las competiciones oficiales, nacionales e internacionales) en su PRIMERA temporada en el club. Krankl 1978-79 Quini 1980-81 Romário 1993-94 Ronaldo 1996-97 LEWANDOWSKI 2022-23 https://t.co/Jswwa2ICpx

Hashtags

Misterchip

@Misterchip2010 · Post #38097 · 10.05.2023 г., 20:08

#OJOALDATO - El Milan ha concedido 2 goles en los primeros 11 minutos de un partido (en casa, fuera o en campo neutral) por PRIMERA VEZ en TODA la historia de la Copa de Europa.

Hashtags

Misterchip

@Misterchip2010 · Post #38094 · 10.05.2023 г., 20:08

#OJOALDATO - Dzeko (37 años y 54 días) es el SEGUNDO jugador más veterano que marca en una semifinal/final de la UEFA Champions League, sólo por detrás de Ryan Giggs (que le marcó al Schalke en 2011 con 37 años y 148 días). https://t.co/Erh6zLwKRX

Hashtags

Misterchip

@Misterchip2010 · Post #38049 · 07.05.2023 г., 22:08

#OJOALDATO - Fernando Alonso es el NOVENO piloto con 4 (o más) podios después de haber cumplido los 41 años en TODA la historia de la Fórmula 1. Sólo hay DOS precedentes en los últimos 60 años (Jacques Laffite y Jack Brabham). Más podios en Fórmula 1 después de cumplir los 41… https://t.co/ocr98oaTShhttps://t.co/paGCEFKISX

Hashtags

Misterchip

@Misterchip2010 · Post #38048 · 07.05.2023 г., 20:08

#OJOALDATO - @carlosalcaraz es el TERCER hombre que GANA sus CUATRO primeras finales de Masters 1.000 (Miami 2022, Madrid 2022, Indian Wells 2023 y Madrid 2023), tras Michael Chang y Jim Courier. Carlos Alcaraz (2022-2023) es el SEGUNDO hombre que defiende con éxito el título en… https://t.co/pUnSILiAt7https://t.co/eYB5ltVuvu

Hashtags

Misterchip

@Misterchip2010 · Post #38032 · 06.05.2023 г., 22:08

#OJOALDATO - Lucas Torró (Cocentaina, Alicante) es el TERCER jugador nacido en la provincia de Alicante que marca en una final de la Copa del Rey, tras Juan Manuel Asensi (con el Barcelona en 1978) y Guillermo Amor (con el Barcelona, en 1990).

Hashtags

Misterchip

@Misterchip2010 · Post #38025 · 06.05.2023 г., 20:08

#OJOALDATO - David Alaba es el PRIMER jugador austriaco que disputa una final del Campeonato de España. Ni el mítico Hansi Krankl tuvo la ocasión de jugar un partido como este. https://t.co/g5w22c9xlN

Hashtags

123•••910
ПретходнаСтраница 1 од 10Следна