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 слични објави

Пребарај: #careless

当前筛选 #careless清除筛选

Directory 目录 / Tags list 标签列表 : Life 生活 : #Comment 评论 #Diary 日记 #Disappointed 失望 #Emotion 感情 #Experience 经验 #Feeling 感觉 #Fun 有趣 #Hope 希望 #Imagination 想象 #Life 生活 #Like 喜欢 #Memory 记忆 #Original 原创 #Thought 想法 #Unlike 不喜欢 Things 事物 : #Block 封锁 #Cat 猫 #Covid 新冠 #Food 食品 #Meme 梗 #News 新闻 #Society 社会 #Transport 交通 #Volunteering 志愿服务 #Website 网站 Region 地区: #Beijing 北京 #Canada 加拿大 #China 中国 #DPRK 北韩 #Europe 欧洲 #HongKong 香港 #Japan 日本 #Map 地图 #Singapore 新加坡 #UnitedStates 美国 Location 地点 : #Campus 校园 #Classroom 教室 #Dormitory 宿舍 #Embassy 大使馆 #Restaurant 餐厅 #Road 马路 #Sidewalk 人行道 #Station 车站 People 人 : #Ace 大佬 #Bachelor 学士 #Classmates 同学 #Freshman 新生 #Friends 朋友 #Genius 天才 #Group 群体 #InternationalStudents 留学生 #InternetFriends 网友 #LGBTQ#Master 硕士 #PHD 博士 #Professor 教授 #Pupil 小学生 #Teacher 教师 Learning 学习 : #Book 书 #Careless 粗心 #Course 课程 #Delay 拖延 #Essay 小论文 #Examination 考试 #Exercise 练习 #Forget 忘记 #Homework 作业 #Learning 学习 #Lecture 讲座 #Mistake 错误 #NCEE 高考 #Notes 笔记 #Presentation 展示 #Preview 预习 #Question 问题 #Ranking 排名 #Reading 阅读 #Report 报告 #Review 复习 #Score 分数 #Slides 幻灯片 Research 研究 #ACM#arXiv#Conference 会议 #IEEEComputer#Paper 论文 #Preprint 预印本 #Research 研究 #SIG Natural Science 自然科学 : #Biology 生物 #Chemistry 化学 #ElectronicEngineering 电子工程 #Geography 地理 #Geology 地质 #Medicine 医学 #Physics 物理 #Technology 科技 Social Science 社会科学 : #Anthropology 人类学 #BusinessStudies 商业研究 #Communication 沟通 #Finance 金融 #Genderstudies 性别研究 #Law 法律 #Marketing 营销 #Psychology 心理学 #Politics 政治学 #Sociology 社会学 #Language 语言 : #Accent 口音 #Chinese 中文 #English 英语 #Etymology 语源 #French 法语 #Grammar 语法 #GRE#Greek 希腊语 #IELTS 雅思 #Japanese 日语 #Latin 拉丁语 #Listening 听力 #Phrase 词组 #Prefix 前缀 #Pronounciation发音#RootWord 词根 #Speaking 口语 #Suffix 后缀 #Writing 写作 #Word 单词