Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Outiside: известный учёный считает, что стареть необязательно
Звучит как фраза из научно-фантастического фильма, но не для известного учёного Дэвида Синклера, одного из ведущих в мире специалистов по старению. Профессор Гарварда, вошедший в список 100 самых влиятельных людей мира в 2014 году по версии журнала Time, согласен с тем, что в какой-то момент все должны умереть, но он утверждает, что мы можем удвоить продолжительность своей жизни и жить здоровой и активной жизнью до конца своих дней.
«Простуда, тяжелая тренировка и время от времени голодание - все это задействует то, что Синклер называет цепью выживания нашего тела, в которой сиртуины приказывают клеткам усилить свою защиту, чтобы поддерживать организм (вас) в живых. Хотя теория цепи выживания Синклера еще не доказана в условиях испытаний, существует множество исследований, которые предполагают, что упражнения, переохлаждение и снижение калорийности помогают замедлить побочные эффекты старения и предотвратить болезни, связанные со старением. В частности, голодание было хорошо подтверждено другими исследованиями: в различных исследованиях и мыши, и дрожжи, которых кормили ограниченными диетами, живут намного дольше, чем их сытые коллеги. Двухлетний эксперимент на людях в 1990-х годах показал, что у участников, которые придерживались ограниченной диеты, из-за которой они оставались голодными, часто снижалось артериальное давление, уровень сахара в крови и уровень холестерина. Последующие исследования на людях показали, что сокращение калорий на 12 процентов замедляет биологическое старение на основе изменений биомаркеров крови».
https://theidealist.ru/agingisoptional/
#Outside#наука#человек#старение
Outside: новое исследование раскрывает то, что на самом деле происходит с вашим телом после ультрамарафона на 160 км
Что остаётся от человеческого тела после 160 километров боли, высот и недостатка сна? Новое исследование разобрало ультрамарафон не только на калории, но и на дни восстановления: сколько энергии уходит на финиш, а сколько — на то, чтобы снова встать с кровати. Оказывается, настоящее испытание начинается не на дистанции, а после неё — когда организму нужно залатать себя изнутри, восполнить тысячи сожжённых калорий и восстановить водный баланс. И всё это — без тренировок, но с невероятным "послевкусием" стресса, которое не улетучивается неделями. Эта статья — взгляд внутрь человека, который дошёл до предела, и за него заглянул.
«Тренировка — это тяжело. Но и восстановление организм воспринимает как полноценную работу. Не забывайте подкармливать своё тело, чтобы оно справилось»
https://theidealist.ru/after160/
#Outside#наука#человек#бег
Outside: как потерпевшие кораблекрушение люди 10 дней выживали в открытом море
25 ноября 2019 года Крис Карни и его команда из двух человек отправились в в путешествие на парусной лодке с мотором из Японии в Гавайи. Крис и товарищи были опытными моряками, а лодка - вполне современной. Но море может преподнести любые сюрпризы, и в результате сильного шторма люди оказались на весьма потрёпанном прироой судне посреди огромного океана, без связи, с минимумом воды и еды, почти без надежды. Им уалось выжить Крис считает, что главными помощниками в беде стали разум и хладнокровие. Его история - в сегодняшнем материале.
«Очень повезло, что судно выдержало. Если бы у нас была пролом, лодка затонула бы примерно через 30 секунд. Нам было холодно, всё промокло. Ни сухой одежды, ни сухих кроватей. Мы сидели на голодном пайке, вроде пяти миндальных орехов в день. Ограничив то немногое количество воды и еды, которое у нас осталось, мы решили, что сможем прожить 40 или 50 дней. Раньше я никогда не сталкивался со смертью лицом к лицу. Все знают, что они умрут. Но никому не приходит в голову думать о том, что смерть наступит через 50 дней».
https://theidealist.ru/shipwreck/
#Outside#человек#море#кораблекрушение#выживание
Ура. Я дома, я на связи!
В ближайшее время всем отвечу☺️
Имеретинские были прекрасны, по всем связанным вопросам с маршрутом пишите в личку.
Из нового подвернул ногу и теперь снова длительное восстановление ☹️
#mountain#lake#outdoor#outside#caucasus
#alpina#buff
Уже в начале июня мы возвращаемся в Красную Поляну и есть свободные дни для походов по маршрутам одного дня, и поездок в Абхазию.
А так же уже можно бронировать многодневные туры, места есть и разлетаются как горячие пирожки.
И да мы готовы организовать поход под запрос и даты которые вам удобны🙏🏻
#походы#туризм#горы#кавказскийзаповедник#mountain#outdoor#outside#trekking
Одним днём в Норвегию смотался😍
Как вам видео?
#mountain#mountainhome#outside#outdoor#adventurelife#wildrussia#wildlife#adventure#explore#summervibe#vibes
Все любители комфорта были услышаны! На Розе Хутор построили крутой, комфортный кемпинг. А не вот эти вот ваши палатки, спальники, котелки, горелки.
Уже 1 июля открывается высокогорный кемпинг Нахазо. Где можно будет провести время на природе, оторваться от работы и получить максимальный заряд. Я думаю, что каждый любит те моменты, когда: неспешно просыпаешь, завтракаешь, проводишь время с самим собой или семьей, друзьями! А также гуляешь, кушаешь, сидишь на краю горы перед крутым спуском и впитываешь горные красоты. Отключаешь голову, расслабляешься и начинаешь просто получать удовольствие от жизни.
Моя жена @kristin044ka была там недавно и осталась в полном восторге. Говорит, что подобного нет нигде в России. Я вот уже горю желанием посмотреть на это место, а вы?
@kirillumrikhin📸
@rosakhutor
#rosakhutor#mountainresort#mountainhotels#mountaincamping#mountain#landscape#outdoor#outside#trekking#hikking#caucasus
Как сэкономить на снаряжении, и когда лучше взять в аренду?
Сейчас покупать снаряжение для активного отдыха стало довольно накладно. А если вы занимаетесь сноубордом/лыжами, туризмом, велосипедом и т.д. - то встаёт ещё вопрос и хранения 🙈
Но вместо того, чтобы грустить, рассмотрим лайфхаки.
Сейчас реально выгодно брать снарягу в аренду, т.к. покупать новое может быть накладно. Особенно, рекомендую аренду, когда вы первый раз идёте в поход или пробуете катание на сноуборде - есть возможность оценить снаряжение, чтобы получить понимание: а нужно ли вам ходить в горы в будущем? И если нужно - какой именно рюкзак, палатку, спальник - вы хотите купить, дабы не переплачивать и не жалеть о покупке.
Поэтому я всё чаще стал рекомендовать пользоваться отличным сервисом аренды снаряжения от @kant_sport в Москве. Это удобно, т.к можно гарантировано взять качественное, чистое снаряжение за разумные деньги. К тому же сейчас в прокате доступно 150 позиций от ледорубов, спальников до велосипедов с лонгбордами. Круто, не правда ли?
Ну и наконец, даже сейчас можно купить снаряжение за отличную цену, а также использовать промокод на скидку. Напомню, что для покупателей магазина @kant_sport у меня есть промокод, он действует в магазине и сервисе. Пользуясь моим промокодом вы поддерживаете меня. Пиши в Direct, поделюсь скидкой)
#rent#outdoor#outside#sportislife#большеспортаярчежизнь#кантспорт#прокат#арендаснаряжения
#snowboard#bike#bicycle#sup#rafting#skate#alpinism#ski