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

Пребарај: #circo

当前筛选 #circo清除筛选
Savino Balzano

@savinobalzano · Post #794 · 28.10.2024 г., 11:14

https://x.com/SavinoBalzano/status/1850857643138597241?t=tVyYIIDdEASXajOwGPtjPw&s=19 Ammetto di essere stato un po' distratto in questi giorni: alcune me l'ero perse. Nell'#Italia del #Fascismo, quella nella quale è stata compressa la #libertà d'espressione ed è a rischio la #democrazia, in pochissimi giorni ne abbiamo sentite delle belle (per la verità le hanno sentite... io le ho recuperate stamattina: a riprova dell'eco che certe cialtronerie producono nel Paese reale). Cito liberamente (rispettando il senso). Secondo #Pascale (continuo a domandarmi perché rilevi l'opinione di questa persona, ma la invitano e dunque...) la #destra di #governo è fascista e omofoba. Poi però #Giuli sceglie un portavoce omosessuale e veniamo colti da un senso di smarrimento e confusione. Secondo #Scurati, invece, #Meloni dovrebbe dar conto delle sue origini neofasciste all'opinione pubblica: dovrebbe, interpreto, fare una sorta di mea culpa, sottoporsi a una gognetta purificatrice, un po' come Cersei Lannister nel #TronoDiSpade. Ricordate? quando tutti le urlavano "vergogna" tra le strade di Approdo del Re. A Scurati affidiamo il ruolo dell'Alto Passero. Secondo #Montanari, ancora, le nostre forze dell'ordine - in preda al rigurgito razzista - fermano per strada la gente perché di colore. Che poi anche sul piano logico arranco: so' diventati razzisti solo perché al governo c'è #Lega e #FDI? prima non lo erano? se invece già lo erano, perché Tomasino non lo denunciava? fatico a seguirlo. Un #circo, un vero e proprio circo, alimentato da un "giornalismo" da due soldi, da guitti che fanno spettacolo invece che #informazione. A me va benissimo, mi diverto, però mi piacerebbe lo ammettessero. Colpisce che certe cose si possano dire nonostante ci sia la limitazione della libertà di espressione, ripeto. Quando cominci a studiare l'inglese, a scuola, ti insegnano che esistono le espressioni «false friends»: quelle parole che suonano come alcune italiane, ma che significano qualcosa di diverso. Ecco, questa gente rappresenta i «false enemies»: sembra che critichino aspramente il Governo, ma il loro punto di vista è tanto ridicolo e grottesco da rafforzarlo. Avanti tutta gente, che entri adesso la donna barbuta e il domatore delle tigri! Ci sono anche zucchero filato e caramelle gommose!