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

Пребарај: #pertini

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

@savinobalzano · Post #727 · 23.08.2024 г., 08:40

https://x.com/SavinoBalzano/status/1826902126892650501?t=Nph5MkcjigQSaPyF7ltyrA&s=19 Parlava agli operai dell'Italsider di Savona, #Pertini, con un discorso tanto toccante e appassionato da essere quasi insopportabile oggi, allo sguardo di chi può guardare indietro, con la consapevolezza di quanto sia stato tradito e disatteso. Si rivolgeva ai giovani, ai lavoratori e invitava tutti alla lotta, alla difesa, alla rivendicazione. Si perché Pertini sapeva benissimo che la #libertà senza giustizia sociale è cosa vana. Cos'è la libertà senza giustizia sociale? Si domandò retoricamente in un famoso discorso di fine anno da #PresidenteDellaRepubblica: è libertà di bestemmiare, nulla di più. Ecco cosa rispose. Era garante del vincolo interno, Pertini, della #Repubblica, della #Costituzione. Tutto ciò che oggi non è il #Quirinale. Oggi al Quirinale si inciucia coi Presidenti della Commissione Europea per disarcionare "dolcemente" un capo di governo inviso agli eurocrati di #Bruxelles o si pone il veto su quel ministro sgradito alle élite finanziarie eurounitarie. In questo Paese è diventato impossibile tutelare l'interesse nazionale: tale impegno è considerato quasi reazionario, nella accezione più negativa del termine. Il punto è che oggi essere reazionari è letteralmente doveroso: una reazione a chi vuole continuare a spolpare le nostre risorse è semplicemente l'unica cosa sensata da fare. Pertini si definiva orgogliosamente riformista. Era giusto: lo faceva quando certi presidi non erano ancora stati conquistati. Oggi forse non ha più senso, se non nella misura in cui la riforma coincida con la restaurazione. Viceversa, è corretto definirsi conservatori se si vuole ciò che voleva Pertini: libertà e giustizia sociale. Il gioco di prestigio è stato proprio questo: dividere i #diritti dopo aver diviso le persone. Contrapporre libertà a diritti sociali, abbandonando l'eversività del programma costituzionale, sancito in particolar modo nell'articolo 3, che più di ogni altro seppe conciliare le anime del Paese: la laburista ("partecipazione dei lavoratori") e la cristiana democratica ("sviluppo della persona umana"). Ciò è stato possibile quando chi storicamente aveva il compito di tutelare i fragili, le periferie sociali ed esistenziali, il mondo del lavoro, ha tradito. Ed è proprio per (mal)celare quel tradimento che si sventola ossessivamente e grottescamente la bandiera arcobaleno intonando un'ormai stonata "bella ciao". È l'imbarazzo di chi non può ammettere di aver "torto il volto" da una storia, da dei valori, da determinati ideali, da una prospettiva, a indurre certe messe in scena grottesche. Lo spettacolo sgredevole cui si assiste è frutto di una necessità imprescindibile: provare a dissimulare il fatto che nel Paese vi sia qualcuno che non persegue l'interesse del #popolo italiano, ma quello di qualcun altro. Un'agenda sociale non può esistere, dopotutto partiti come il #PD non l'hanno mai perseguita quando hanno guidato il Paese, perché la priorità per alcuni è quella di agevolare determinati centri di potere, mediante le politiche economiche neoliberali volute a Bruxelles (e non solo). Oggi si urla al #fascismo, mitizzando "intellettuali" completamente vuoti, ma se soltanto le forze di opposizione abbandonassero (cosa impossibile) il ruolo di servitù o di utile idiozia il pericolo diverrebbe quello del ritorno allo stalinismo o qualcosa del genere. Ecco perché è fondamentale aprire gli occhi e comprendere che gli ideali esistono, mentre non esiste più la tradizionale contrapposizione partitica da essi sottesa. Non ha dunque alcun senso il demenziale sostenere per affezione una parte, con la consapevolezza che appena arrivata al potere svenderà ciò che vi è più caro. E ragionarci da un Paese come la #Grecia è assai più amaro: qui il #neocolonialismo e l'avido sciacallaggio europeo lo hanno pagato letteralmente con la vita.