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

Пребарај: #serge3d

当前筛选 #serge3d清除筛选
3D-Hmangaupload

@hmangafor3duploadtest · Post #21025 · 15.01.2025 г., 15:52

#S_SUMMER_BREAK_1-3 #s_Turn" #s_Very_Merry_Christmas#s_Very_Merry_Christmas" #s_Villa" #s" #Sabotage_1#Sabotage_1-4 #Sabotage_2#Sabotage_3#Sabotage_4#Sail#Saisyuusyoku#sakai08#Santa_Swap#Satisfying_Needs_1-6 #saw2008#SD大學陪讀生林婉晴_1-3 #Secret_of_Beauty_03#Secret_of_Beauty_1_-_Stone_Lady #Secret_Of_Beauty_2_-_Orc_rituals #SedesDis#Seduction_the_Beast#Serge3d#Serge3dx#Serge3DX#ses21#Shassai#Sherry#Shin_Sangoku_Musou#Shiun#Shiun红忍的修行01-07 #Shota_Kyoudai_no_Itazura#ShowTime#silvercastle#Singer#Sister#Skin_Exprience#Skinsuit_Possession#Sky_Cat#Skyla_-_Wrong_Turn #SLASH#Slave_Plan_01-不知火舞は惨めではない #Slave_Plan_02-女性ファイター春麗をキャプチャ #Sleeping_Beauty_5#Sleeping_Beauty_6#Slumber_party#smallflyingrat#smallflyingrat(小飛鼠) #Smarttigerd#Sneaky_Bastard#Son_of_beach#Sorceress_Lori_-_Beyond_Death_+_Sold_To_Demons #Sound_Garden_1-6 #Space_Pirate#speaKCiao#Spellbound#Spider-Man #SR_3DART#Stacy_001#Stacy_002#Stan#stan13#Steri-Nurse_-_Come_Join_Us #Steri-Nurse_-_The_Lesson #Stopwatch_时间停止器#Strangers_in_a_StrangeLand_1-3 #Succubus_Trap#Sunny_Wheel#Supafly#SupaFly#sycosistg#System_Failure#t_Get_Caught_Again_+_Knight_Elayne_-_Game_of_Mischief" #TachibanaKizen#taka4106#Tanya_&_The_Succubus_1-3 #Telsis#Tento#TERESA_-_CAN_NOT_GO_BACK #The_Amazing_Elinor#The_Audition1-2\xa0\xa0 #The_Bang_1-2 #The_Boy_and_his_Dog#The_Call#The_Cloud_Temple_&_Redux #The_Crafty_Maid#The_Evolution_of_Hermine_Granger#The_exchange_student#The_Fall_Of_The_Swan_vol.1\xa0\xa0 #The_Fall_Of_The_Swan_vol.2_-_The_nightmare_of_a_ballet_dancer #The_Final#The_First_Prize#The_Game_+_Luna #The_Gift#The_Grandma_01-03 #The_healer#The_Holiday#The_Meeting#The_Obsession#The_Park_1#the_pw#The_Sacrifice_Ch.1-16_Completed\xa0\xa0 #The_Scandalous_Proposal#The_Sex_Toy#The_Special_Offer#The_Tan_1-8 #The_Trip_to_Egypt_1-3 #The_Trophy_Wife#The_Ultimate_Beast_Hunt#The_Ultimate_Goblin_Gangbang#The_Ultimate_Goblin_Gangbang_2#The_Ultimate_Slave_Training#The_Violinist#The_visit#TheMaskedMoron#Thief_Ezri_-_Don #Tia_001#Tia_002#Tifa#Tifa_Rape_by_Zombies#Tifa_vs_Fly#Tifa_vs_Roach#tifalover#Tim#TiMOP#tin_a_fool_TikTok_MYLF" #Tira#TKXS#Together_In_The_Army_Now_1#Together_In_The_Army_Now_2#Tomb_Raider_-_The_Death_Mask_of #TOP1女销售经理的堕落01#TOP1女销售经理的堕落02#TOP1女销售经理的堕落03#Tough_luck#Trade_Winds#Training_Tsunade#Trap_Video#Trapped_With_The_Orc#Trick_or_Treat_1_&_2_-_Jack_O #Trick_or_Treat_3_Part1_&_Part2 #Trick_or_Treat_4_-_Part_3 #Trick_or_Treat_4_-_Part_4 #Trick_or_Treat_4_-_Part_5 #Trick_or_Treat_4_Part1#Trick_or_Treat_4_Part2#Trick_or_Treat_5#Trick_or_Treat+Timmy_strikes_back\xa0\xa01-5 #TrophyMom_1-4 #trust2018#Tslove#uglive_4k#Uiafox#UIAFOX#Ultra_Lady_tai_Hae_Seijin#Ultraman#Ultrarin#uncensored#Underworld#uuG#V-Kris #V1z3t4#valentine_1-3 #Valentine_Episode_1#Valentine_Episode_1-2 #Valentine_Episode_2#Vampire_Hunters#Vchan

Hashtags

#s_summer_break_1#s_turn#s_very_merry_christmas#s_villa#s#sabotage_1#sabotage_2#sabotage_3#sabotage_4#sail#saisyuusyoku#sakai08#santa_swap#satisfying_needs_1#saw2008#sd大學陪讀生林婉晴_1#secret_of_beauty_03#secret_of_beauty_1_#secret_of_beauty_2_#sedesdis#seduction_the_beast#serge3d#serge3dx#ses21#shassai#sherry#shin_sangoku_musou#shiun#shiun红忍的修行01#shota_kyoudai_no_itazura#showtime#silvercastle#singer#sister#skin_exprience#skinsuit_possession#sky_cat#skyla_#slash#slave_plan_01#slave_plan_02#sleeping_beauty_5#sleeping_beauty_6#slumber_party#smallflyingrat#smarttigerd#sneaky_bastard#son_of_beach#sorceress_lori_#sound_garden_1#space_pirate#speakciao#spellbound#spider#sr_3dart#stacy_001#stacy_002#stan#stan13#steri#stopwatch_时间停止器#strangers_in_a_strangeland_1#succubus_trap#sunny_wheel#supafly#sycosistg#system_failure#t_get_caught_again_#tachibanakizen#taka4106#tanya_#telsis#tento#teresa_#the_amazing_elinor#the_audition1#the_bang_1#the_boy_and_his_dog#the_call#the_cloud_temple_#the_crafty_maid#the_evolution_of_hermine_granger#the_exchange_student#the_fall_of_the_swan_vol#the_final#the_first_prize#the_game_#the_gift#the_grandma_01#the_healer#the_holiday#the_meeting#the_obsession#the_park_1#the_pw#the_sacrifice_ch#the_scandalous_proposal#the_sex_toy#the_special_offer#the_tan_1#the_trip_to_egypt_1#the_trophy_wife#the_ultimate_beast_hunt#the_ultimate_goblin_gangbang#the_ultimate_goblin_gangbang_2#the_ultimate_slave_training#the_violinist#the_visit#themaskedmoron#thief_ezri_#tia_001#tia_002#tifa#tifa_rape_by_zombies#tifa_vs_fly#tifa_vs_roach#tifalover#tim#timop#tin_a_fool_tiktok_mylf#tira#tkxs#together_in_the_army_now_1#together_in_the_army_now_2#tomb_raider_#top1女销售经理的堕落01#top1女销售经理的堕落02#top1女销售经理的堕落03#tough_luck#trade_winds#training_tsunade#trap_video#trapped_with_the_orc#trick_or_treat_1_#trick_or_treat_3_part1_#trick_or_treat_4_#trick_or_treat_4_part1#trick_or_treat_4_part2#trick_or_treat_5#trick_or_treat#trophymom_1#trust2018#tslove#uglive_4k#uiafox#ultra_lady_tai_hae_seijin#ultraman#ultrarin#uncensored#underworld#uug#v#v1z3t4#valentine_1#valentine_episode_1#valentine_episode_2#vampire_hunters#vchan