Строки
Строковые типы
- str (НЕизменяемое) - строки юникода
- bytes (НЕизменяемое) - для представления двоичных данных (в том числе кодированный текст)
- bytearray (изменяемый bytes) - последовательности 8-битных целых чисел. Однако они поддерживают большую часть строковых операций и при отображении выводятся как строки символов ASCII. Объекты этого типа обеспечивают возможность хранения больших объемов текста, который требуется изменять достаточно часто.
Как задаются строки
- 'в одинарных кавычках', "двойных кавычках", 'фильм "Титаник"' или "фильм 'Титаник'"
- тройные кавычки из ' или ":
- многострочная строка; (html)
- docstring
- комментарий (лучше так не делать)
- 'C:\\new\\text.dat' - escape-последовательности \n, \t, \r
- r'C:\new\text.dat' - экранирует escape-последовательности (сделано, чтобы удобно было писать regexp)
- u'Unicode string' - строка юникода
- str(...) - строка
Методы строки
сложение 'abc'+'xyzb
>>> 'abc'+'xyz' 'abcxyz'
умножение 'hi'*3
>>> 'hi' * 3 'hihihi'
<, >, <=, >=, ==, != - побайтовое сравнение строк
- символы юникода могут быть представлены по-разному, например, символ 0x00C5 может быть представлен как [0xE2, 0x84, 0xAB], [0xC3, 0x85] и [0x41, 0xCC, 0x8A].
Используем unicodedata.normalize(form='NFKD') "Normalization Form Compatibility Decomposition" – нормализация в форме совместимой декомпозиции), то, передав ей строку, содержащую символ 0x00C5, представленный любой из допустимых последовательностей байтов, мы получим строку с символами в кодировке UTF-8, где интересующий нас символ всегда будет представлен последовательностью [0x41, 0xCC, 0x8A].
порядок сортировки некоторых символов зависит от языка, в шведском a с двумя точками будет идти после z, а немецком он будет сортироваться, как если бы это была строка 'ae'
подробнее о проблемах сортировки юникода см unicode.org/reports/tr10
Срезы
>>>'Hello'[1] e >>>'Hello'[1:3] el >>>'Hello, world!'[1:10:2] 'el,wr'
Проверка, что строка пустая
if s: print('Строка пустая') else: print('Строка НЕ пустая')
Потому что:
>>> bool(s) False >>> bool('Hello') True
in - проверка, что в строке содержится подстрока
>>> 'el' in 'Hello' True
Проверки (строка непустая и все символы удовлетворяют критерию):
- str.isalnum()
- str.isalpha()
- str.isdecimal()
- str.isdigit()
- str.isidentifier()
- str.islower()
- str.isnumeric()
- str.isprintable()
- str.isspace()
- str.istitle()
- str.isupper()
Большие и маленькие буквы:
- str.capitalize()
- str.casefold()
- str.swapcase()
- str.title()
- str.upper()
- str.lower()
Выравнивание:
- str.center()
- str.ljust()
- str.rjust()
Убрать символы (пробелы)
- str.lstrip()
- str.rstrip()
- str.strip()
>>> ' spacious '.strip() 'spacious' >>> 'www.example.com'.strip('cmowz.') 'example' >>> comment_string = '#....... Section 3.2.1 Issue #32 .......' >>> comment_string.strip('.#! ') 'Section 3.2.1 Issue #32'
- Из табуляций в пробелы
- str.expandtabs()
>>> '01\t012\t0123\t01234'.expandtabs() '01 012 0123 01234' >>> '01\t012\t0123\t01234'.expandtabs(4) '01 012 0123 01234'
- str.expandtabs()
- Делаем строку
- str.zfill() - заполняем строку нулями.
>>> "42".zfill(5) '00042' >>> "-42".zfill(5) '-0042'
- str.zfill() - заполняем строку нулями.
Кодировка:
- str.encode(encoding="utf-8")
Шифрование:
- str.maketrans()
- str.translate(table)
Форматирование:
- str.format()
- str.format_map()
Проверки (подстрока в строке)
- str.count(sub) - сколько раз входит (без пересечений)
- in - поиск подстроки в строке
- str.endswith(sub) - str оканчивается на sub
- str.startswith(sub) -
Индекс начала подстроки в строке, (иначе проверяем как 'el' in 'Hello')
- str.find(sub[, start[, end]]) - возвращает -1, если подстроки нет
- str.index(sub[, start[, end]]) - кидает ValueError, если подстроки нет
- str.rfind(sub[, start[, end]])
- str.rindex(sub[, start[, end]])
Разделение и склейка
- str.partition() - разделить на 3 части - до, разделитель, после
- str.rpartition()
- str.rsplit()
- str.split(sep=None, maxsplit=-1) - разделить по sep на много частей
>>> '1,2,3'.split(',') ['1', '2', '3'] >>> '1,2,3'.split(',', maxsplit=1) ['1', '2,3'] >>> '1,2,,3,'.split(',') ['1', '2', '', '3', '']
- str.join(iterable)
>>> a = ['hi', 'ha', 'ho'] >>> '-'.join(a) 'hi-ha-ho'
- str.splitlines()
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines() ['ab c', '', 'de fg', 'kl'] >>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True) ['ab c\n', '\n', 'de fg\r', 'kl\r\n']
Поиск и замена:
- str.replace(old, new, [count])
>>>'AAAAAA'.replace('AA', 'A') 'AAA' >>> S = 'xxxxSPAMxxxxSPAMxxxx' >>> S.replace('SPAM', 'EGGS') # Заменить все найденные подстроки ‘xxxxEGGSxxxxEGGSxxxx’ >>> S.replace('SPAM', 'EGGS', 1) # Заменить одну подстроку 'xxxxEGGSxxxxSPAMxxxx'
- str.replace(old, new, [count])
Коды символов
- ord(символ) - ASCII code символа
- chr(ascii_code) - получить символ
>>> ord('a') 97 >>> chr(97) 'a'