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

Резултати

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

Пребарај: #cyanbug

当前筛选 #cyanbug清除筛选
PT风向旗

@Ptfxq · Post #651 · 26.04.2024 г., 01:36

关闭登录的内站登陆方法、各站点的官方群组、频道、机器人等信息。本条消息将及时更新,转发消息请点击👆🏻“PT风向旗“👆🏻查看最新版本 因为 TG 的单条消息的字数限制,故切分消息并按照首字母排序。共三条消息,本条消息为第一条,包含数字开头及 A-G 开头的站点。 #1PTBA 官方频道:https://t.me/on1ptba 官方群组:https://t.me/ptbar_Chat 关门登录:印象中没关过门 #2xfree 官方频道:https://t.me/group_2xfreeOrg 官方群组:https://t.me/vr2xfreechat 关门登录:印象中没关过门 #3wmg#芒果 官方群组:https://t.me/www3wmg #52pt 官方群组:https://t.me/joinchat/NcihYBedvjXZIG5qEKXcpQ #Audiences#观众 官方机器人:https://t.me/Audiences_Official_Bot 官方频道:https://t.me/Audiences_Channel 官方群组:绑定官方机器人加入 关门登录:通过官方机器人获取登录链接 #AGSV#AGSVPT 官方机器人:https://t.me/agsvpt_account_bot 官方群组:https://t.me/AgsvPT_public 关门登录:在网址后加 "/agsvpt" 即可。 #Azusa#梓喵 官方机器人:https://t.me/AzusaServiceBot 官方群组:绑定官方机器人加入 关门登录:通过官方机器人获取登录链接 #BTS#BTSchool#学校 无任何官方频道、群组、机器人。 非官方群组:https://t.me/btschoolclub 关门登录:只能自行备份 #BYR#BYRPT#北邮#北邮人 官方频道:https://t.me/byr_status 关门登录:印象中没关过门 #CarPT#车#车站 什么都没找到 #CHD#CHDBits#彩虹岛#岛 官方群组:https://t.me/+4GL9H6BlQrczNmM5 关门登录:不定期在 QQ 群内发送登录链接。 #Cyanbug#大青虫 官方群组:https://t.me/cyanbug 关门登录:印象中没关过门 #CMCT#SSD#春天 官方机器人:https://t.me/cmct_bot 官方群组:绑定官方机器人加入 官方频道:https://t.me/+xlhFGICfmOZmMGU9 非官方资讯频道:https://t.me/cmc_tnews 官种 RSS 官方频道:https://t.me/ssd_offical_rss 保种区 RSS 官方频道:https://t.me/ssd_guarder_rss 关门登录:通过官方机器人获取登录链接 #Dajiao#打胶 官方群组:https://t.me/DaJiaoPT_Group 关门登录:印象中没关过门 #DiscFan#碟粉 官方 RSS 机器人:https://t.me/DiscFan_RSS_Bot 官方 RSS 频道:https://t.me/DiscFanChannel 官方群组:https://t.me/discfanofficial 关门登录:印象中没关过门 #DICMusic#DIC#GreatPosterWall#GPW 官方机器人:https://t.me/DICGate_Bot 官方频道:https://t.me/DolphinIsComing 官方群组:https://t.me/joinchat/I5xEuEgEQ29Q75zV5WNW4g 账号申诉群:https://t.me/joinchat/LBgGJQs8DKhO7yOHFvH9Jw 关门登录:通过官方机器人获取登录链接 #DragonHD#龙之家 什么都没找到 #FRDS#KEEPFRDS#朋友 官方机器人:https://t.me/NasaRelayBot 官方频道:https://t.me/LetUsKeepFriendsForever 官方群组:https://t.me/+FrUb_hj2hodiNmZl 压制交流群:https://t.me/+V3PD9djMoUr4v38n 关门登录:印象中没关过门 #FreeFarm#自由农场 官方机器人:https://t.me/FFarmBot 官方频道:https://t.me/+TZrLdBvaoA4zMmY9 官方群组:https://t.me/+eItLwsrYPzlmNTQ1 关门登录:通过官方机器人获取登录链接 #FSM 官方机器人:https://t.me/FsmPrivateBot 官方频道:https://t.me/FsmNotify 官方群组:https://t.me/+9vgDC8VFVNlkMjE0 关门登录:印象中没关过门,如果登录不上挂个梯子试试 #GTK#ptgtk 什么都没找到 #GGPT#GameGamePT 官方频道:https://t.me/GGPTcom 官方群组:https://t.me/gamegamept 关门登录:印象中没关过门