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

Пребарај: #kurilovka

当前筛选 #kurilovka清除筛选
DruschbaFM - English

@druschbaFm_en · Post #51699 · 07.03.2025 г., 07:43

⚡️🇷🇺🇺🇦⚔️Fiend Reports in the Morning of 7 March 2025⚡️ 🔴#Kursk Region: 🔴In Sudzhansky district, in the area of #​​Sverdlikovo, Russian troops continue to attack with mobile groups along the border in southerly direction. 🟡 On the eastern flank, the RFAF have advanced into #Kurilovka and along the 'Kholodny Yar Ravine' to a depth of 4 kilometres. 🗺 Map 1 ➡️ The situation remains difficult (for the AFU). 🔴#Svatovo Front: 🔴 In #Kupyansk Sector, the Russians expanded the bridgehead on the western bank of the Oskol River in a section up to 2.73 kilometres wide and up to 1.15 kilometres deep. 🗺 Map 2 🔴#ChasovYar Direction: 🔴In #ChasovYar Sector, Russian troops, supported by 25 units of equipment, attacked the western part of the city. During the clashes, fighters of the AFU's 24th Brigade destroyed/hit 16 units of equipment and drove the Russians out of a number of positions. 🗺 Map 3 🎞 Video ➡️ A grey zone has been added to the map tentatively. The front configuration is being clarified. 🔴#Pokrovsk Direction: 🔴 On the right Flank, the AFU repelled attacks by Russian troops in the area of ​​#Peschanoye. 🔴 On the left Flank, the AFU repelled attacks by Russian troops in the area of ​​#Uspenovka and are also conducting counteractions in neighbouring areas. ➡️ The situation for the direction has not changed significantly. 📋Reported on 7 Mar at 08:00 📋Reported on 7 Mar at 08:18 📋Reported on 7 Mar at 08:31 🕰GMT+3; #smo 🇺🇦Map📍 📱For the Military Hardcore 💬 Welcome to Military Chat

DruschbaFM - English

@druschbaFm_en · Post #51663 · 06.03.2025 г., 07:32

⚡️🇷🇺🇺🇦⚔️Fiend Reports in the Morning of 6 March 2025⚡️ 🔴#Kursk Region: 🔴In Sudzhansky district, Russian troops continue attacks from the area of ​​the #NikolayevoDaryino settlement in the direction of #Sumy region, assaulting the area of ​​the #Lebedevka and #NovayaSorochina settlements. 🟡 At #Kurilovka, they have advanced in the eastern part of the 'Kholodny Yar Ravine' and on the southern outskirts of the settlement. 🗺 Map ➡️ The situation remains difficult (for the AFU). 🔴#Svatovo Front: 🔴 In #Kupyansk and #Liman directions, the situation has not changed significantly. 🔴#ChasovYar Direction: 🔴In #Toretsk Sector, fighting is taking place for the northern outskirts of the city and the southwestern part of the 'Zabalka Microdistrict.' The situation remains dynamic. 🔴#Pokrovsk Direction: 🔴 On the right Flank, fighting of varying intensity continues in the areas of ​​the #ZelyonoyePole, #Baranovka, #Shevchenko, #Peschanoye and #Kotlino villages... 🔴 On the left Flank, for #Udachnoye and #Uspenovka. 🔴#Komar Direction: 🔴In #Kurakhovo Sector, the RFAF reduced the number of attacks by infantry units and began to restore and accumulate forces and resources. 📋Reported on 6 Mar at 08:16 🕰GMT+3; #smo 🇺🇦Map📍 📱For the Military Hardcore 💬 Welcome to Military Chat