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

Резултати

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

Пребарај: #hypercars

当前筛选 #hypercars清除筛选
Luxury Lifestyle

@luxury_lifestyle_billionaire_hub · Post #6985 · 11.11.2021 г., 14:56

🌈Night right in the brand new Mercedes E-class 2022😍 #Luxury#Hypercars#Supercars 📷 Ig @mr.ecabriolet ✅🔜@Luxury_Lifestyle_Billionaire_Hub ━━━━━━━━━━━━━━━━━

Luxury Lifestyle

@luxury_lifestyle_billionaire_hub · Post #6989 · 17.11.2021 г., 15:01

🌈 Interior of the all-new Mercedes-Benz EQS 😍 #Luxury#HyperCars#Supercar 📷 Ig @thegoodlifeinc ✅🔜@Luxury_Lifestyle_Billionaire_Hub ━━━━━━━━━━━━━━━━━

Luxury Lifestyle

@luxury_lifestyle_billionaire_hub · Post #6987 · 13.11.2021 г., 15:00

🌈$200,000 Range Rover! 🥵 Worth it? #Luxury#HyperCars#Supercar 📷 Ig @landroverprinceton ✅🔜@Luxury_Lifestyle_Billionaire_Hub ━━━━━━━━━━━━━━━━━

Car News

@car_news · Post #44 · 17.05.2024 г., 12:30

🚘Bugatti's new hypercar will have a speedometer with cosmic numbers⚡️ The speedometer of the Bugatti Chiron successor will be marked up to 550 km/h – a photo of a branded box with unknown contents was published by blogger Marcus Brownlee. Most likely, the new hypercar with an atmospheric V16 will get an analog speedometer, like its predecessor, and the figure of 550 km/h that's 50 km/h more than the marking of the device in the Bugatti Chiron. Did you evaluate the 'coolness' of cars by the numbers on the speedometer when you were a kid? 😀 @CarsNews #Bugatti#hypercars

Car News

@car_news · Post #4 · 28.04.2024 г., 19:22

📸 A spy shot of Bugatti’s next hypercar TopGear showed the very first photos of Bugatti Chiron’s successor: The sweeping C remains in the side profile and is actually more pronounced than ever, while the rear diffuser looks like it might be the size of a whole Suzuki Swift. Pop-up rear spoiler and a traditional low nose too, plus a sweeping line of LED rear lights. Pretty proportions, aren’t they? Bugatti is moving away from its old 8.0-litre quad-turbo W16 engine for this car, but rather than downsizing it’ll be replaced by an equally bonkers V16. There also will be hybrid assist to help bump up the power figure. We’d expect said figure to be considerable and the resulting acceleration to be mind-blowing. @CarsNews #Bugatti#hypercars