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

Пребарај: #resultsoftheyear

当前筛选 #resultsoftheyear清除筛选

@RusEmbMalta Press release 🇷🇺President Vladimir Putin Summarises 2025: Key Messages from the “Results of the Year” Address 📍Moscow, | 19 December 2025 President of the Russian Federation Vladimir Putin held the annual “Results of the Year” event, combining a live Q&A session with a press conference. More than 3 million questions were submitted by citizens and journalists. Over 4.5 hours, the President addressed 103 questions on domestic development, the economy, social policy, digital sovereignty, and international affairs. 🌍Foreign Policy, Ukraine, and the Special Military Operation ▪️ Russia currently sees no readiness on the part of Ukraine for a genuine peace process or territorial compromises. ▪️ The strategic initiative has fully shifted to the Russian Armed Forces; Ukrainian forces are retreating along key directions. ▪️ Russia did not initiate the conflict and does not consider itself responsible for the human losses incurred. ▪️ Moscow remains open to political solutions and is prepared to consider security guarantees during potential elections in Ukraine, including a temporary refusal to conduct strikes deep inside Ukrainian territory. Relations with the West and International Security ▪️ The seizure of Russian sovereign assets was described as outright plunder, undermining trust in the eurozone and global financial institutions. ▪️ Any attempt to blockade the Kaliningrad region would escalate tensions to an unprecedented, potentially large-scale military level. ▪️ Russia remains open to cooperation with Europe, the UK, and the United States – strictly on the basis of equality and mutual respect. ▪️ According to the President, the current conflict is the direct result of Western policies that deliberately escalated tensions around Ukraine. 📊Economy and Financial Stability ▪️ Russia’s GDP growth reached 1% in 2025, while cumulative growth over the past three years amounted to 9.7%, significantly exceeding eurozone indicators. ▪️ Inflation is expected to decline to 5.7–5.8% by year-end. ▪️ Unemployment fell to a historic low of 2.2%. ▪️ International reserves of the Central Bank reached USD 741.5 billion. 💻Digital Sovereignty President Putin announced that Russia has effectively achieved full digital sovereignty, highlighting the development of domestic digital platforms and technologies as a strategic achievement amid external pressure. Other Key Issues The discussion also covered demographic policy, education, water supply challenges in Donbass, legislation on foreign agents, and sanctions pressure on Russia’s international partners. 🔗Full version here. #Russia🇷🇺 #PresidentPutin #ResultsOfTheYear #ForeignPolicy #Ukraine #SMO #InternationalRelations