Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:pyton:digit [2022/01/23 11:10] admin |
develop:pyton:digit [2022/12/01 06:42] (текущий) admin |
||
---|---|---|---|
Строка 99: | Строка 99: | ||
==== Форматирование строк ==== | ==== Форматирование строк ==== | ||
- | |||
- | |||
<code python> | <code python> | ||
< | < | ||
Строка 113: | Строка 111: | ||
# < | # < | ||
</ | </ | ||
+ | |||
Строка 124: | Строка 123: | ||
"{0} - {1} - {2}" | "{0} - {1} - {2}" | ||
</ | </ | ||
+ | |||
Строка 134: | Строка 134: | ||
a= 10; b= 12.3; s= " | a= 10; b= 12.3; s= " | ||
f"{a} - {b} - {s}" | f"{a} - {b} - {s}" | ||
+ | |||
+ | # Еще вариант вставки переменных в строку | ||
+ | print(" | ||
</ | </ | ||
+ | |||
Строка 140: | Строка 144: | ||
* **strip()** - удаляет указанные символы в начале и конце строки (если не указано то пробелы удаляет) | * **strip()** - удаляет указанные символы в начале и конце строки (если не указано то пробелы удаляет) | ||
* **l[r]strip()** - тоже самое только вначале (в конце) строки | * **l[r]strip()** - тоже самое только вначале (в конце) строки | ||
- | * **split(< | + | * **split(< |
* **rsplit()** - справа на лево | * **rsplit()** - справа на лево | ||
* **splitlines(< | * **splitlines(< | ||
- | * **join()** - собирает строку "< | + | * **join()** - собирает строку "< |
<code python> | <code python> | ||
" => " | " => " | ||
</ | </ | ||
+ | |||
==== Локаль ==== | ==== Локаль ==== | ||
+ | **locate(< | ||
+ | Модуль **locale**, устанавливать несколько раз.\\ | ||
+ | Установить можно командой **locate.setlocate(< | ||
+ | * **locate.LC_ALL** - для всех режимов | ||
+ | * **locate.LC_COLLATE** - для сравнения строк | ||
+ | * **locate.LC_CTYPE** - для перевода регистра | ||
+ | * **locate.LC_MONETARY** - для денежных единиц | ||
+ | * **locate.LC_NUMERIC** - для чисел | ||
+ | * **locate.LC_TIME** - для даты/ | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
==== Регистр символов ==== | ==== Регистр символов ==== | ||
+ | **upper(), lower(), swapcase(), capitalize(), | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
==== Функции и методы символов ==== | ==== Функции и методы символов ==== | ||
+ | **chr(), ord()**- возвращает символ указанного кода, и код указанного символа\\ | ||
- | <code python> | ||
- | </ | ||
- | <code python> | + | ==== Поиск и замена ==== |
- | </code> | + | * **find()** - возвращает номер позиции с которой начинается подстрока или -1 если ее нет, **чувствителен к регистру**. |
+ | * **index()** - аналогично, | ||
+ | * **rfind()/rindex()** - аналогично но возвращает номер последнего вхождения | ||
+ | * **count()** - кол-во вхождений | ||
+ | * **startswith()/ | ||
+ | * **replace()** - возвращает новую строку. < | ||
+ | * **translate(< | ||
- | ==== Поиск и замена ==== | ||
+ | ==== Проверка типа содержимого строки ==== | ||
+ | Есть рад функций типа **isalnum()**, | ||
- | <code python> | ||
- | </ | ||
- | <code python> | ||
- | </ | ||
+ | ==== bytes ==== | ||
+ | Хранит в себе неизменяемую последовательность байт, от 0..255, можно хранить бинарные данные, | ||
- | ==== Проверка типа ==== | + | **bytearray**- впринципе тоже самое, но последовательность |
- | <code python> | ||
- | </ | ||
- | <code python> | + | ==== Преобразование ==== |
- | </code> | + | Преобразовать объект в последовательность байтов (т.е. выполнить сериализацию/ |
+ | * **dump(<Объект>, < | ||
+ | * **load(<последовательность байт>, | ||
- | ==== bytes ==== | ||
+ | ==== Шифрование ==== | ||
+ | Модуль **hashlib**\\ | ||
+ | Функции типа **md5()**, **sha1, | ||
- | <code python> | ||
- | </ | ||
- | <code python> | ||
- | </ | ||
+ | ===== Регулярные выражения ===== | ||
+ | **import re**\\ | ||
+ | [[https:// | ||
- | ==== bytearray ==== | ||
+ | ==== Синтаксис ==== | ||
+ | Шаблон нужно компилировать ф-ей **compile()**\\ | ||
+ | :!: Символ **r** перед строкой позволяет не экранировать спец символы\\ | ||
<code python> | <code python> | ||
- | </code> | + | <Шаблон>= re.compile(< |
- | <code python> | + | p= re.compile(r" |
- | </ | + | if p.search(" |
+ | # Либо | ||
+ | if re.search(" | ||
- | ==== Преобразование ==== | + | </ |
+ | Модификаторы: | ||
+ | * **I (IGNORECASE)** - регистр | ||
+ | * **M (MULTILINE)** - текст с подстроками, | ||
+ | * **S (DOTALL)** - если указать, | ||
+ | * **X (VERBOSE)** - пробелы и перевод строки игнорируется | ||
+ | Экранирование слешем (\) или в квадратных скобках | ||
<code python> | <code python> | ||
+ | re.compile(r" | ||
+ | re.compile(r" | ||
</ | </ | ||
+ | Символы ^ и $ зависят от модификаторов (M или S), \A и \Z- аналогичные, | ||
<code python> | <code python> | ||
- | </ | + | p= re.compile(r" |
+ | p.findall(" | ||
+ | p= re.compile(r" | ||
+ | p.findall(" | ||
- | ==== Шифрование | + | p= re.compile(r" |
+ | p.findall(" | ||
- | <code python> | + | p= re.compile(r" |
- | </ | + | p.search(" |
+ | |||
+ | # Позиция для поиска | ||
+ | p= re.compile(r" | ||
+ | p.search(" | ||
- | <code python> | + | p= re.compile(r" |
+ | p.search(" | ||
</ | </ | ||
+ | Вместо символов можно использовать классы: | ||
+ | * **\d** - цифры | ||
+ | * **\w** - цифры и буква | ||
+ | * **\s** - любой пробельный символ | ||
+ | * **\D, \W, \S** - тоже самое, ток отрицание | ||
+ | * **\b** - начало слова | ||
+ | * **\B** - не начало слова | ||
- | ===== Регулярные выражения ===== | + | Число вхождений, |
+ | * **{n}, {n,}, {n,m}** - ровно **n**, **n** и более, от **n** до **m** | ||
+ | * ***** - ноль | ||
+ | * **+** - одно или более | ||
+ | * **?** - ни одного | ||
+ | Ищется самая длинная строка, | ||
+ | Получить содержимое тегов '< | ||
+ | <code python> | ||
+ | s= '< | ||
+ | p= re.compile(r"< | ||
+ | p.findall(s) | ||
+ | >> ['< | ||
- | ==== Синтаксис ==== | + | p= re.compile(r"< |
+ | p.findall(s) | ||
+ | >> ['< | ||
- | + | p= re.compile(r" | |
- | <code python> | + | p.findall(s) |
+ | >> [' | ||
</ | </ | ||
- | <code python> | ||
- | </ | ||
- | + | Скобки **группируют фрагменты**, чтобы отбросить из результата сами фрагменты, нужно указать **?:** внутри | |
- | ==== Поиск первого совпадения ==== | + | Например (?:tx) найдет и " |
+ | К найденному фрагменту можно обратится, | ||
+ | Например получим текст между одинаковыми тегами: | ||
<code python> | <code python> | ||
- | </code> | + | s= '< |
+ | p= re.compile(r"< | ||
+ | p.findall(s) | ||
+ | >> [(' | ||
- | <code python> | + | # ?P<name> - для задания имени фрагменту |
+ | s= 'eed 34 dc 3455' | ||
+ | p= re.compile(r" | ||
+ | p.search(s) | ||
+ | p.group(' | ||
+ | >> ' | ||
</ | </ | ||
- | ==== Поиск всех | + | ==== Поиск |
+ | Для этого есть следующе методы (и функции их аналоги): | ||
+ | * **match()** - соответствие с началом строки | ||
+ | * **search()** - соответствие с любой частью строки | ||
+ | * **fullmatch()** - соответствие со всей строкой | ||
+ | |||
+ | Объект **Match** содержит следующие свойства и методы: | ||
+ | * **re** - ссылка на скомпилированный шаблон, | ||
+ | * **groups (groupindex)** - кол-во групп в шаблоне (перечисление в словаре) | ||
+ | * **pattern** - строка с рег выражением | ||
+ | * **flags** - комбинация флагов | ||
+ | * **string** - строка .. оО | ||
+ | * **pos (endpos)** - начальная/ | ||
+ | * **lastindex (lastgroup)** - пар-ры последней группы | ||
+ | * **group (groups, groupdict)** - фрагменты, | ||
+ | * **start (end)** - начало/ | ||
+ | * **span** - кортеж с начальным и конечным индексами фрагмента | ||
+ | * **expand** - замена в строке | ||
- | <code python> | + | ==== Поиск всех совпадений ==== |
- | </ | + | Это так же функции и методы: |
- | + | * **findall()** - возвращает список (строк или кортежей), | |
- | <code python> | + | * **finditer()** - возвращает итератор, |
- | </ | + | |
==== Замена в строке ==== | ==== Замена в строке ==== | ||
+ | Метод **sub()** ищет все совпадения и заменяет указанным значением\\ | ||
+ | sub[< | ||
+ | Внутри нового фрагмента можно использовать **обратные ссылки** типа (\номер элемента \g название группы \g номер группы)\\ | ||
<code python> | <code python> | ||
- | </code> | + | # Поменяем два тега местами |
+ | p= re.compile(r" | ||
+ | print(p.sub(r"< | ||
+ | print(p.sub(r"< | ||
+ | print(p.sub(r"< | ||
- | <code python> | + | # Функция для замены |
- | </ | + | def repl(match): |
+ | x= int(match.group(0)) | ||
+ | x += 10 | ||
+ | return " | ||
- | + | p= re.compile(r" | |
- | ==== Функции и методы ==== | + | print(p.sub(repl, |
- | + | ||
- | + | ||
- | <code python> | + | |
</ | </ | ||
- | <code python> | ||
- | </ | ||
+ | ==== Прочие функции и методы ==== | ||
+ | * **split()** - разбивка строки | ||
+ | * **escape()** - экранирует все символы (re.escape(r" | ||
+ | * **purge()** - очистка кэша рег выражений | ||