Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Daromad topish uchun qaysi sohada boʻlishni ahamiyati yoʻqligini yana bir bor isboti
Ingliz tili oʻqituvchisi 10,000$ topgani haqidagi videosini instagramga koʻrib qoldim.
Biz ham uning faolligidan oʻzimizga kerakli qismlarini olsak boʻlarkan va u qanday qilib bu natijaga chiqqanini men sizlarga tahlil qilib bermoqchiman:
1. Xususiy maktabda ishlarkan (u yerda nisbatan oylik yuqori toʻlanadi);
2. OTMʼda kechki paytlarda ham dars berarkan;
3. Instagram va telegram orqali obunachilarini oʻqitgan. Soatiga 20$ dan oʻqitarkan, individual oʻquvchi esa oʻrtacha 150$.
4. Instagramda 20K obunachisi bor (reklamasini aytib oʻtmagan ekan, reklamadan kamida 300-400$+ olishi ham mumkin)
Endi hisoblaymiz: maktabdan oʻrtacha 12 mln soʻm oylik + OTM oʻrtacha 6 mln oylik + individual oʻquvchilardan oyiga 10 mln + reklamalardan oyiga 5 mln= jami 33 mln soʻm.
(Harajatlar oyiga: 55 mln soʻm 😇)
Videoda noyabrdan mart oyigacha, yaʼni 5 oyda 10,000$ topganini yozib ketgan ekan. Meni, nazariyamga koʻra bundan balandroq summa ham topishi mumkin. Daromad yuqoriligidan harajatlar ham yuqori boʻlishi ehtimoli bor. Vaqtida, bir necha ingliz tili mentorlari ish faoliyatiga qiziqib koʻrganman, uddalasa boʻladi.
Biz ham, shu ingliz tili oʻqituvchisini shijoatini "copy/paste" qilib olishimiz kerak, qachongacha depressiya deb yuramiz-e, uyat! )
@suxrobblog // #daromad
"Figma for education" tarifi haqida
Figma jamoasi student va oʻqituvchilar uchun oʻzining Pro tarifini bepul taqdim etib kelayotgan edi. Meni tanishlarim va oʻzim ham ancha vaqtdan beri "student" tarifidan foydalanib kelmoqda edim. Lekin, meni oʻylantiradigan joyi, shu dasturdan foydalanib biz foyda olyapmiz va yana oyiga 12$ toʻlamay bepul foydalanish qanchalik toʻgrikan?!
Shu dastur orqali qancha vaqtdan beri ishlab kelib, ustiga ustak student tarifiga ulanib olib ishlash, figma jamoasini aldash boʻlib qolib, ertaga ular haqqini soʻraganda men nima derkanman deb, sekin-asta figmani sotib olishga oʻtmoqchiman, albatta ularni ham qolib ketgan haqlarini ham chiqarib yuborgan holda...
Bu postni yozishimdan maqsad esa, bizning qadriyatlarga mos boʻlmaganini sizga ham yetkazish edi. Kimga qanaqa bilmadim-u, siz ham ertaga shu kabi dastur ishlab chiqsangiz, ishlab chiqaruvchilarni oʻrniga oʻzingizni qoʻyib koʻring, siz rozi boʻlarmidingiz?
P.s. Eslatma sifatida eslatib qoʻydim men, amal qilish qilmaslik esa ehtiyoringizda, haqiqiy mutaxassislar esa birovning mehnatini ham qadrlashini unutmang!
@suxrobblog — #figma#daromad
Bu hikoyani tushunganimda va amalda qoʻllaganimda daromadimda oʻzgarishlar boʻlgan
Yuqoridagi hazil sifatida ulashilgan postdan keyin xabarlar kela boshlagani uchun bu postni yozishga qaror qildim. Quyidagi hikoyani diqqat bilan bir necha bor oʻqing:
... Ikki dehqon bugʻdoy ekishardi. Ikkalasi ham bir xil mehnat qilishadi, ter toʻkib ishlar ekan. Biroq ulardan biri unumsiz yerga ekib, arang noniga yetadigan hosil olarkan. Ikkinchisi esa unumdor yer topib, moʻl hosil oladi va yaxshi daromad qilarkan. Farq faqat shundaki: ikkinchisi qayerda ekishni bilardi.
Bu hayotning har sohasiga tegishli, xatto, dizaynga ham. Koʻp dizaynerlar tinmay ishlashadi, lekin baʼzilari kuchini toʻgʻri yoʻnaltirib, boshqalardan bir necha barobar koʻproq daromad qiladi. Bu yerda tajriba boʻlishi yoki boʻlmasligini ahamiyati yoʻq...
— Yaʼniki, mehnatning oʻzi yetarli emas, muhimi, qayerda va qanday yoʻnalishda mehnat qilishdir.
Shu joyda toʻxtab oʻylab koʻring. Sizchi toʻgʻri joyda ekayapsizmi?
@suxrobblog
#hikoya#karyera#daromad
🆕 BUGUN Moliyaviy erkinlik sari birinchi qadamni qo‘ying!
Siz ham:
❌ Oylikdan oylikkacha yashashdan charchadingizmi?
❌ Qarzlardan chiqishni xohlaysizmi?
❌ Pulni boshqarishni o‘rganmoqchimisiz?
Unda aynan siz uchun — "Moliyaviy erkinlik" kursi!
😀 Kursda siz:
✔️ Pulni to‘g‘ri boshqarishni
✔️ Jamg‘arish va ko‘paytirish sirlarini
✔️ Qarzlarsiz yashash tizimini
✔️ Daromadni oshirish strategiyalarini o‘rganasiz
🚀 Eng muhimi — bu bilimlar sizga butun umr xizmat qiladi!
🎯 BUGUN ro‘yxatdan o‘ting — joylar cheklangan!
⏰ Ertaga kech bo‘lishi mumkin!
✉️ Hoziroq yozing: "START"
va batafsil ma’lumotni oling!
🛫@StarGuli_bot
🛫@Mojizaviy_Guli
#moliyaviyerkinlik#pul#daromad#investitsiya#onlaynkurs
Trip Hotel – qulay va zamonaviy dam olish 🏨
✨ Shinam va toza xonalar
📍 Qulay joylashuv
📶 Bepul Wi-Fi va yuqori servis
📞 90-194-88-88
👉 Dam olish uchun mukammal tanlov!
#sayohat#daromad#hotel#mehmonxona#arzon