На этом шаге мы рассмотрим основные функции и методы работы со строками.
Рассмотрим основные функции для работы со строками:
>>> str(), str([1, 2]), str((3, 4)), str({"x": 1}) ('', '[1, 2]', '(3, 4)', "{'x': 1}") >>> print("строка1\nстрока2") строка1 строка2
>>> repr("Строка"), repr([1, 2, 3]), repr({"x": 5}) ("'Строка'", '[1, 2, 3]', "{'x': 5}") >>> repr("строка1\nстрока2") "'строка1\\nстрока2'"
>>> ascii([1, 2, 3]), ascii({"x": 5}) ('[1, 2, 3]', "{'x': 5}") >>> ascii("строка") "'\\u0441\\u0442\\u0440\\u043e\\u043a\\u0430'"
>>> len("Python"), len("\r\n\t"), len(r"\r\n\t") (6, 3, 6) >>> len("строка") 6
Приведем перечень основных методов для работы со строками:
>>> s1, s2 = " str\n\r\v\t", "strstrstrokstrstrstr" >>> "'%s' - '%s'" % (s1.strip(), s2.strip("str")) "'str' - 'ok'"
>>> s1, s2 = " str\n\r\v\t", "strstrstrokstrstrstr" >>> "'%s' - '%s'" % (s1.lstrip(), s2.lstrip("str")) "'str\n\r\x0b\t' - 'okstrstrstr'"
>>> s1, s2 = " str\n\r\v\t", "strstrstrokstrstrstr" >>> "'%s' - '%s'" % (s1.rstrip(), s2.rstrip("str")) "' str' - 'strstrstrok'"
>>> s = "word1 word2 word3" >>> s.split(), s.split(None, 1) (['word1', 'word2', 'word3'], ['word1', 'word2 word3']) >>> s = "word1\nword2\nword3" >>> s.split("\n") ['word1', 'word2', 'word3']
Если в строке содержатся несколько пробелов подряд, и разделитель не указан, то пустые элементы не будут добавлены в список:
>>> s = "word1 word2 word3 " >>> s.split() ['word1', 'word2', 'word3']
При использовании другого разделителя могут возникнуть пустые элементы:
>>> s = ",,word1,,word2,,word3,," >>> s.split() ['', '', 'word1', '', 'word2', '', 'word3', '', ''] >>> "1,,2,,3".split(",") ['1', '', '2', '', '3']
Если разделитель не найден в строке, то список будет состоять из одного элемента, представляющего исходную строку:
>>> "word1 word2 word3".split("\n") ['word1 word2 word3']
>>> s = "word1 word2 word3" >>> s.rsplit(), s.rsplit(None, 1) (['word1', 'word2', 'word3'], ['word1 word2', 'word3']) >>> "word1\nword2\nword3".rsplit("\n") ['word1', 'word2', 'word3']
>>> "word1\nword2\nword3".splitlines() ['word1', 'word2', 'word3'] >>> "word1\nword2\nword3".splitlines(True) ['word1\n', 'word2\n', 'word3'] >>> "word1\nword2\nword3".splitlines(False) ['word1', 'word2', 'word3'] >>> "word1 word2 word3".splitlines() ['word1 word2 word3']
>>> "word1 word2 word3".partition(" ") ('word1', ' ', 'word2 word3') >>> "word1 word2 word3".partition("\n") ('word1 word2 word3', '', '')
>>> "word1 word2 word3".rpartition(" ") ('word1 word2', ' ', 'word3') >>> "word1 word2 word3".rpartition("\n") ('', '', 'word1 word2 word3')
<Строка> = <Разделитель>.join(<Последовательность>)
В качестве примера преобразуем список и кортеж в строку:
>>> " => ".join(["word1", "word2", "word3"]) 'word1 => word2 => word3' >>> " ".join(("word1", "word2", "word3")) 'word1 word2 word3'
Обратите внимание на то, что элементы последовательностей должны быть строками, иначе возбуждается исключение TypeError:
>>> " ".join(["word1", "word2", 5]) Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> " ".join(["word1", "word2", 5]) TypeError: sequence item 2: expected str instance, int found
Как вы уже знаете, строки относятся к неизменяемым типам данных. Если попытаться изменить символ по индексу, то возникнет ошибка. Чтобы изменить символ по индексу, можно преобразовать строку в список с помощью функции list(), произвести изменения, а затем с помощью метода join() преобразовать список обратно в строку. Пример:
>>> s = "Python" >>> arr = list(s); arr # Преобразуем строку в список ['P', 'y', 't', 'h', 'o', 'n'] >>> arr[0] = "J"; arr # Изменяем элемент по индексу ['J', 'y', 't', 'h', 'o', 'n'] >>> s = "".join(arr); s # Преобразуем список в строку 'Jython'
В Python 3 можно также преобразовать строку в тип bytearray, а затем изменить символ по индексу:
>>> s = "Python" >>> b = bytearray(s, "cp1251"); b bytearray(b'Python') >>> b[0] = ord("J"); b bytearray(b'Jython') >>> s = b.decode("cp1251"); s 'Jython'
На следующем шаге мы рассмотрим настройку локали.