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

Пребарај: #vespa

当前筛选 #vespa清除筛选
Elena Basile Public Channel

@elenabasilepublicchanel · Post #146 · 02.10.2024 г., 10:00

Israele evidentemente con la luce verde dello Stato che lo finanzia e lo rifornisce di armi ha ottenuto la risposta dell' Iran Una seconda risposta misurata che ha dimostrato come sia possibile colpire gravemente Israele Una risposta concordata con gli americani che non ha fatto vittime civili Israele e l Occidente complice hanno un bilancio di 100.000 vittime a Gaza ( stima di una rivista prestigiosa quale Lancet) e di 1500 libanesi, di attentati mirati a leadership politiche negli altri paesi, terrorismo di Stato al di fuori di ogni legalità a cui sobrie analisi di politici, giornalisti e intellettuali occidentali di fatto si riferiscono con patetica indulgenza Dall' altra abbiamo l Iran che per due volte modera la sua risposta, la sua hubris e avverte l' avversario dell' attacco L' Iran non è suicida evita l' escalation per quanto possibile Probabilmente il criminale di guerra Netanyahu( lo definisce tale il procuratore della CPI) e l' irresponsabile leadership neoconservatrice statunitense hanno deciso che bisogna andare fino in fondo e infliggere un duro colpo a Teheran È quanto la lobby di Israele chiede da anni. Biden non puo lasciare questa posizione all' avversario Trump, la Harris deve pur esser finanziata. Eppure questa escalation pone non solo il MO ma il mondo a rischio nucleare L' Iran non è l' Iraq L'Iran è un alleato essenziale per Russia e Cina che mantengono stretti contatti #Vespa in un clip che ho visto su YouTube ( per favore spegnete le tv , non alimentate le audience di chi non fa informazione) ha detto in un dialogo con #Conte che gli arabi hanno festeggiato la morte di Nasrallah Credo che le diplomazie arabe sappiano invece cosa di rischia. Credere che un attentato terroristico contro un capo di un partito radicato nella società civile libanese e che ha 12 seggi in Parlamento diventi legittimo perché qualche arabo fa festa prova a che livelli il giornalismo è giunto #Borrell e #Tajani al seguito chiedono la de-escalation dopo aver tuttavia condannato l'Iran Appelli comici e oltraggiosi L' unico modo per ottenere la de-escalation è fermare Israele a cui l' àEuropa insieme agli USA ha assicurato l' impunità. È uno Stato che come afferma la corte dell' Aja opera al di fuori del diritto internazionale e umanitario, esprimendo un disprezzo assoluto per le norme e la vita umana Quel che più mi sgomenta è il cambiamento antropologico dei cittadini europei. Anche se istruiti, con militanze a favore dei diritti umani, appaiono insensibili alla carneficina in corso Tifano per Israele come se fossimo di fronte a una partita di tennis Vedono bombardare gli inermi, i bambini, i martiri di Gaza, i martiri libanesi e non sbattono ciglio Si augurano con interventi pubblici l' allargamento del conflitto Dovrebbero essere denunciati per crimini di odio I cattivi, Iran o Russia, devono essere eliminati per il trionfo della democrazia e dei diritti umani Sembrano più esaltati, spinti da dogmi irrazionali, di stampo messianico Sono molto più simili agli Ayatollah che affermano di voler combattere Sta diventando tardi Spegnete la tv Documentatevi su internet Federiamoci e soprattutto non lasciamoci intimorire Esprimiamo il nostro pensiero liberamente Contrastare i disegni dei neoconservatori statunitensi a cui una Europa che ha perso se stessa si allinea È un dovere morale prima che politico! #GazaGenocide #Lebanon2024 #iran