Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#ftt
😐 Биржа FTX в 2024 году в рамках процедуры банкротства реализовала 8% акций Anthropic за $1,3b.
Сегодня эта доля стоила бы > $30b.
Сэм Бэнкман-Фрид: Юрист при продаже заявил, что Anthropic «ничего не стоит».
Ранее:
- ходатайство о пересмотре дела
- FTX не была банкротом
- «тюремные записки»
Crypto Headlines
#FTT
FTX направит кредиторам еще $2,2 млрд 31 марта
FTX Recovery Trust объявил о четвертом раунде выплат кредиторам. Распределение начнется 31 марта 2026 года, а деньги должны поступить через BitGo, Kraken или Payoneer в течение 1–3 рабочих дней после этой даты. Выплаты получат держатели одобренных требований, которые заранее прошли KYC, подали налоговые формы и подключили сервис для получения средств.
По классам выплат расклад такой:
— требования клиентов FTX.com получат еще 18%, суммарно 96%
— требования клиентов FTX US получат 5%, суммарно 100%
— общие необеспеченные требования и требования по займам в цифровых активах получат по 15%, суммарно 100%
— convenience claims выйдут на 120% совокупной выплаты.
Отдельно FTX назначила 30 апреля 2026 года датой фиксации для первых выплат держателям привилегированного капитала. Первая такая выплата запланирована на 29 мая 2026 года.
#FTT
SBF обвиняет администрацию Байдена в “политической войне” по делу FTX
Сэм Бэнкман-Фрид (бывший глава FTX) публично заявил, что его дело и дела других фигурантов были частью “политического преследования”, и обвинил власти в том, что защита якобы не могла полноценно отвечать на обвинения и представлять материалы.
Машина Байдена по ведению политических дел выдвинула против меня, Дональда Трампа, Райана Саламе ложные обвинения… Чтобы обвинения закрепились, они не давали нам даже возможности ответить на них.
👀#FTT bounced back from the Green zone also broken up the ceiling of the bearish channel on 6H Time frame,it's ready for the next pump💎
❄️@signals_bitcoin_crypto❄️
❄️@Shadow_support0o❄️
The FTX situation has made the #FTT token drop over 40% in less than 48h, making the entire crypto space get a massive hit, we can also see it has broken the support level of 12$ easily, and we are likely to stay under this range for a very long time before any recovery ever to happen.
🔹#FTT#Crypto Update
FTX has announced the next fund distribution dates:
- Registration Cutoff: August 15
- Distribution Begins: September 30
As always, many experts expect that a portion of the returned funds will flow back into the market.