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

Резултати

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

Пребарај: #charliekirkdead

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

@savinobalzano · Post #1152 · 12.09.2025 г., 07:23

https://x.com/SavinoBalzano/status/1966401919372415449?t=IVZg2Cg0peuQSL__EIEOmg&s=19 Noto con grandissima soddisfazione che il mio video di ieri abbia fatto da stura: sono saltati i tombini e tanti si sono precipitati fuori dalle fogne a commentare. La cosa mi aggrada tantissimo: ogni insulto per me è un motivo d’orgoglio, una medaglia da appuntare al petto. Perché ancora una volta si dimostra la vostra ipocrisia, la vostra patetica falsità: siete voi i violenti, voi i fascisti. Voi che gioite per la morte di #CharlieKirk, voi che non vi indignate per ciò che ha subito, voi che ritenete giusto non osservare sessanta secondi di silenzio. Voi che, vilmente, vi accanite sul suo corpo come iene ridens, come avvoltoi. Era un giovane politico, un giovanissimo papà. Uno che andava fiero delle proprie idee e che si batteva, dialetticamente, per affermarle. Si sedeva davanti alle platee più ostili proprio per confrontarsi con gentaglia come voi: “dimostratemi che ho torto”, vi chiedeva solo questo. Mai un gesto violento: solo la forza della parola. In questo (e forse anche in altro) era infinitamente migliore di me: io non riesco a superare la nausea che mi provoca il rapportarmi con certe persone, e infatti mi rifiuto di farlo. Lui aveva lo stomaco più forte. Non condividevo molte delle sue idee: la sua estrazione culturale e quella politica erano lontanissime dalle mie. Le sue argomentazioni su Gaza e sul Medio Oriente erano l’antitesi di ciò in cui credo con tutto me stesso. Ma la sua fine mi rattrista, perché è su un altro piano. Se non lo capite, siete solo dei miserabili, degli scarafaggi. Andatevi a vedere le sue posizioni sul 7 ottobre: molto, molto, molto interessanti. Gioite pure, ora, dopo che per anni vi ha seduti di culo a terra con i suoi ragionamenti. E adesso guardate nello specchio: lì troverete la vera violenza. #Kirk era una persona migliore di voi: forse lo sapete benissimo, ed è proprio per questo che esplodete di livore. #CharlieKirkshot#CharlieKirkdead

Savino Balzano

@savinobalzano · Post #1159 · 17.09.2025 г., 08:01

https://x.com/SavinoBalzano/status/1968222845550420170?t=C-t0mVv8sKktYAfjQ3Lurg&s=19 Ieri ho avuto un confronto molto schietto con #Odifreddi. Ha ribadito quanto già affermato sul caso #Kirk e, a dirla tutta, ci ha anche messo un bel carico da novanta. Sentite cosa ha detto. Continuo a ritenere le sue affermazioni profondamente sbagliate, ma non sono riuscito a convincerlo. #CharlieKirk aveva idee che spesso non condividevo — anzi, molto spesso — ma non ha mai fatto nulla di male. Paragonarlo a figure storiche che hanno arrecato danni all’umanità è retoricamente e moralmente sbagliato. #BattitoriLiberi: dal lunedì al venerdì, alle 17, su Radio Cusano. #CharlieKirkshot#CharlieKirkdead

Savino Balzano

@savinobalzano · Post #1151 · 11.09.2025 г., 18:22

https://x.com/SavinoBalzano/status/1966204737012772939?t=8KOdyCTX14bLMXQIG6HafA&s=19 Oggi si è scritta una delle pagine più vergognose nella storia del #ParlamentoEuropeo: è stato negato il minuto di silenzio per l’omicidio politico di #CharlieKirk. Per carità, non che la storia di quell’istituzione sia mai stata particolarmente gloriosa — visto che non rappresenta nessuno se non autocrati bellicisti — ma qui si è davvero superato il limite. Negare quel minuto significa concedere legittimità, copertura politica all’attentato. È un punto bassissimo. Aspetto con curiosità il cordoglio dei leader della cosiddetta sinistra, e dei commentatori ossessionati dal fascismo e dall’“onda nera”: non vi sorprende che a subire certi attacchi siano sempre quelli che stanno dall’altra parte? Infine, ho trovato imbarazzante il post di #RobertoSaviano. Mi fa persino tenerezza: paragonare l’attentato all’incendio del Reichstag del 1933 (episodio peraltro storicamente controverso) è un’operazione squallida, una retorichetta da strapazzo che serve solo a rovesciare i ruoli, trasformando le vittime in carnefici. Patetico e decadente. #BattitoriLiberi: dal lunedì al venerdì, alle 17, su @RadioCusano. #CharlieKirkshot#CharlieKirkdead#Kirk

Savino Balzano

@savinobalzano · Post #1154 · 13.09.2025 г., 18:29

https://x.com/SavinoBalzano/status/1966925029293387807?t=4RMoYRKOb7ibkTRHfFU6_A&s=19 Roberto #Saviano ne ha sparata un'altra: «Non ho alcuna empatia con Charlie #Kirk». L'ipocrisia è insopportabile: ossessionati dal fascismo, dalla torsione autoritaria, dalla democratura, dalla capocrazia… eppure incapaci di provare un minimo di empatia per una persona che perde la vita in quel modo. Aveva già approfittato dell’attentato a #CharlieKirk per attaccare #Trump e paragonarlo all’Hitler del 1933, sciacallando su una vicenda drammatica. Ma a Saviano, evidentemente, non bastava. Va bene così: continuate pure. È proprio ciò che ci vuole. La gente aprirà gli occhi, la maschera cadrà, e vi vedrà per chi e cosa siete davvero. Ci ha pensato Giuseppe Cruciani a rimettere le cose a posto. #BattitoriLiberi: dal lunedì al venerdì, alle 17, su @RadioCusano. #cruciani#CharlieKirkshot#CharlieKirkdead