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

Резултати

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

Пребарај: #cava

当前筛选 #cava清除筛选
proWines🍷

@pro_Wines · Post #3114 · 04.03.2025 г., 17:03

CAVA VS CORPINNAT Вчера бдительные читатели заметили ошибку, а это значит, что про неё надо рассказать постом)) И cava и corpinnat производятся в 🇪🇸 Каталонии традиционным методом (вторичная ферментация в бутылке), но между ними есть различия. Cava — это игристое вино с защищённым наименованием происхождения (DO Cava), производимое в нескольких регионах Испании, включая Каталонию, Арагон, Кастилию-Леон и другие. Почти всегда основные сорта — Макабео, Парельяда и Шарелло, цвет и содержание сахара и алкоголя различное, и может быть rose. Corpinnat — это относительно новая категория игристых вин, выделена крупными игроками рынка отдельно в 2019 году. Название происходит от "Cor" - сердце и "Pinnat" - древнее название Пенедеса, то есть"Сердце Пенедеса". В Испании "cava" , как у нас "молоко"), название продукта, не привязано к месту производства. Производится cava почти по всей 🇪🇸, во многих винодельнях, где терруар, сорта, подход значительно разоличаются. А задача была выделить "испанскую шампань", и вот, создали Corpinnat и производят его в 11ти винодельнях. Отличия: - Corpinnat использует исключительно виноград из Пенедеса, для cava не ограничено этим регионом. - Corpinnat делает акцент на органическом виноградарстве и автохтонных сортах, обязательно ручной сбор, в cava могут быть и другие сорта и методы. - Corpinnat выдержка мин 18 мес, cava меньше. Если и Cava и Corpinnat "выросли" в одной стране, и схожи корнями, то разницу между ними вы можете почувствовать у себя в бокале. Чин! 🍷 #Cava #Corpinnat @pro_Wines

proWines🍷

@pro_Wines · Post #2837 · 27.08.2024 г., 16:06

Cava L`atzar Brut Nature Reserva Всё таки лето, это только пузырьки или белое вино. Я уже и не помню день, когда у меня гостило красное вино.... Испания 🇪🇸, Каталония (DO), белое, брют, крепость 11,5 %, классический купаж Парельяда, Макабео и Шарелло. Эта позиция очень распространена в кафешках, и на летних верандах ресторанов. В бокале нежное золото с красивым, стойким перляжем. В носу минеральность, корочки хлеба, груша и лимонные цукаты. Вкус - настойчивая деликатность, цитрусы, свежесть, яркость, плюс стойкое послевкусие. Ценник +/- 2000р. Чин! 🍷 #cava #Moli_dels_Capellans @pro_Wines

proWines🍷

@pro_Wines · Post #2835 · 24.08.2024 г., 16:43

KRONE Borealis Vintage Cuvee Brut Krone Это классика... ЮАР 🇿🇦, Западный Кейп, белое, брют, крепость 12%, купаж Пино нуар, Пино блан и Шардоне. Аромат захватывает даже пока ещё вино перемещается в бокал, и никаких тебе мягких фруктиков, сторого и с достоинством - нежное, мягкое, ароматное игристое. В бокале солома, в носу сливочность, печёные яблоки, бисквит. Вкус мягкий, деликатный, с умеренной кислотностью, на языке проявляются оттенки выпечки, ореха и абрикосовых косточек. Послевкусие значительно долгое. Ценник +/- 1500р. Чин! 🍷 #Cava #Krone #дайтеДве @pro_Wines