Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
✈️Трагедия в небе : грузовой самолёт UPS потерпел крушение у главного хаба службы доставки
В международном аэропорту Луисвилла (штат Кентукки) потерпел крушение грузовой самолёт McDonnell Douglas MD-11F, принадлежащий UPS Airlines.
Самолёт направлялся на Гавайи. На борту находились три члена экипажа, по предварительным данным, погибло не менее семи человек.
📦UPS Airlines — дочерняя компания крупнейшей в мире службы доставки UPS, чей главный хаб Worldport находится именно в Луисвилле. Здесь ежедневно проходит более 2 млн отправлений, а работают 12 тыс. человек.
Флот авиакомпании превышает 500 самолётов, из них 292 — собственные. UPS — крупнейший оператор Boeing 747-8F и один из ведущих эксплуатантов Boeing 757/767, MD-11F и Airbus A300 Freighter.
Это удар не только по компании, но и по целой системе, где Луисвилл — один из ключевых узлов доставки.
#ТИСЛОДЖИСТИК🦏
#Авиалогистика
#UPS
⏺⏺⏺ואיך אתם הייתם מגיבים???
בינתיים, מניין ההרוגים עלה ל-7: צוות המטוס שמונה 3 אנשים ועוד 4 אנשים על הקרקע. המטוס היה בן 34 שנים והיה אמור להמשיך בטיסה להוואי.
https://t.me/AviationNewsIL/8238
#התרסקות#ארהב#UPS#UPS2976#MD11
🗣דיווחים ראשונים על התרסקות מטוס UPS בארה"ב
עוקב אחר דיווחים על התרסקות בלואיוויל, ובה ייתכן שמטוס MD-11 של UPS התרסק מיד לאחר ההמראה.
https://t.me/AviationNewsIL/8233
#התרסקות#ארהב#UPS#UPS2976#MD11
President Joe Biden enlists Walmart, FedEx to fix bottlenecks
President Joe Biden urged the private sector to help ease supply chain blockages that are threatening to disrupt the U.S. holiday season and said the White House plans a nationwide overhaul of the clogged system.
#JoeBiden#supplychain#Walmart#FedEx#UPS#News#Reuters
Subscribe: http://smarturl.it/reuterssubscribe
Reuters brings you the latest business, finance and breaking news video from around the globe. Our reputation for accuracy and impartiality is unparalleled.
Get the latest news on: http://reuters.com/
Follow Reuters on Facebook: https://www.facebook.com/Reuters
Follow Reuters on Twitter: https://twitter.com/Reuters
Follow Reuters on Instagram: https://www.instagram.com/reuters/?hl=en
➖@reutersworldchannel➖
🔴לא רק MD-11: ה-FAA החליט לקרקע גם את גרסאות המקדונל דאגלס DC-10 בשל מבנה המנוע הדומה שלהם
בשבוע שעבר הוציא ה-FAA צו חירום לכל מטוסי בואינג מדגם MD-11 ו-MD-11F. צו החירום אסר על טיסות נוספות עד לבדיקת המטוס ולביצוע כל הפעולות המתקנות הרלוונטיות. כעת, הצו מתרחב גם למטוסי המקדונל דאגלס DC-10.
https://t.me/AviationNewsIL/8304
#התרסקות#ארהב#UPS#UPS2976#FAA#MD11#DC10
🚨 모닝스타 전문가가 공개한 "9% 배당수익률" 숨겨진 보석주
워런 버핏도 인정한 투자 원칙을 따르는 모닝스타의 수석 전략가가 2025년 하반기 '돈 되는' 배당주 리스트를 전격 공개했습니다.
가장 눈길을 끄는 건? 리오넬바셀(LYB) - 무려 9% 배당수익률에 공정가치 대비 40% 할인된 가격.
더 놀라운 사실은 상반기 최대 하락주였던 UPS가 오히려 6.5% 배당수익률로 '투자 기회'가 되었다는 점입니다. 아마존과의 결별이 악재가 아니라 오히려 마진 개선의 전환점이 될 수 있다는 분석이 흥미롭네요.
💡 전문가가 강조한 핵심 인사이트:
관세 전쟁 한복판에서도 유틸리티·필수소비재·헬스케어는 안전
AI 과열 상태에서 가치주로의 자금 이동 신호
달러코스트 애버리징으로 하락장을 기회로 만드는 전략
특히 트럼프 정부의 의약품 가격 정책 우려로 브리스톨마이어스가 제외되고, 대신 에버소스(4.7%), 키뱅크(5.2%), 에너지트랜스퍼(7%+)가 신규 편입된 배경도 주목할 만합니다.
7-8월 관세 협상 마감일이 다가오면서 시장 변동성은 더욱 커질 전망. 지금이 방어적 배당주로 포트폴리오를 재편할 마지막 기회일 수도 있습니다.
👇 전체 10개 종목 리스트와 각 종목별 투자 논리가 궁금하다면 아래 링크 클릭!
https://themiilk.com/articles/a4de68e3a?u=3e083717&t=a9e289131&from=
#배당주#모닝스타#가치투자#리오넬바셀#UPS#관세정책#2025투자전략