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

Резултати

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

Пребарај: #kolomoiskij

当前筛选 #kolomoiskij清除筛选
Maurizio Vezzosi

@mauriziovezzosi · Post #54 · 23.05.2019 г., 15:11

La vendetta di Igor Kolomoiskij 23 maggio 2019 di Maurizio Vezzosi #Ucraina - Ad appena qualche giorno dall'insediamento ufficiale alla presidenza di Vladimir #Zelenskij, Igor #Kolomoiskij - l'oligarca di cui il neo-presidente è espressione diretta - è rientrato in Ucraina da #Israele. L'inizio della sua vendetta nei confronti dell'oligarca-arcinemico Petro Poroshenko non si è fatto attendere. Alla Procura Generale ucraina è bastato appena qualche giorno per avviare un'indagine per alto tradimento nei confronti dell'ormai ex presidente Poroshenko, che ora rischia l'esilio o la galera. I fatti presi in esame dalla Procura Generale ucraina sarebbero relativi alla provocazione orchestrata da Poroshenko sullo stretto di Kerch lo scorso novembre: una provocazione usata deliberatamente dallo stesso Poroshenko come pretesto per introdurre nel paese la legge marziale nel disperato tentativo di rimandare le imminenti elezioni presidenziali o, in ogni caso, di salvarlo dall'assoluta impopolarità: contemporaneamente alla messa in stato d'accusa dell'ex presidente sono iniziate le epurazioni dei vertici militari a lui legati a doppio filo. Nel frattempo Zelenskij si è detto disposto ad intavolare delle trattative con #Mosca per risolvere il conflitto in #Donbass, pur ribadendo che “l'Ucraina è il miglior alleato degli Stati Uniti” e che il futuro dell'Ucraina è all'interno dell'Alleanza Atlantica. Una trattativa, quella che Zelenskij sostiene di voler intraprendere, che ha i tratti ed i presupposti di una farsa. Sarebbe sorprendente trovarsi a dover constatare il contrario.

Maurizio Vezzosi

@mauriziovezzosi · Post #21 · 01.04.2019 г., 08:41

In #Ucraina il primo turno delle elezioni presidenziali ha visto il comico Zelenskij incassare circa il 30% dei favori dei votanti: il comico, è espressione degli interessi di Igor #Kolomoiskij, uno dei più potenti oligarchi ucraini, tra i più attivi nell'aver finanziato le formazioni neofasciste prima, durante e dopo il #Maidan. #Zeliskij, come prevedibile, ha surclassato l'attuale presidente Petro #Poroshenko, che nonostante i brogli non è riuscito ad ottenere più del 16%. Fuori dai giochi da subito Julia #Grigjan, meglio conosciuta come Julia #Timoshenko, che non è andata oltre il 13%. Dietro di lei #Bojko al 9%, #Gritsenko al 7% e #Liashko al 5%. Cinque anni fa Poroshenko, che negli anni della presidenza ha moltiplicato i propri patrimoni circa sette volte, aveva vinto al primo turno con il 55%. Il 21 aprile il ballottaggio, in cui la sconfitta elettorale di Poroshenko si prospetta probabile, ma non certa. Intanto, in #Donbass prosegue la finta pace: quella costata circa 11000 morti e un milione e mezzo di profughi.