Python 3: работа со строками

Здесь описаны функции и возможности, без которых в питоне будет туго.

Не забывайте, что результаты выполнения всех функций нужно где-то использовать или куда-то присваивать: сама исходная строка не меняется! :)

Почти любой тип можно привести к строке с помощью функции (точнее, конструктора) str.
>>> str(5)
'5'
>>> str(2.4)
'2.4'
>>> str(None)
'None'
>>> str([2, 3, 4])
'[2, 3, 4]'
>>> str(Exception)
"<class 'Exception'>"

Обратную операцию (преобразование строки в число) можно произвести с помощью int и float. Причём принимают они не только строки, но и байты.
>>> int(b"5")
5
>>> int("5")
5
>>> int("-28")
-28
>>> float("-24.6")
-24.6
>>> float("-3e11")
-300000000000.0
>>> float("0.3")
0.3


Заведём подопытные объекты bytes и str. Большинство указанных функций работают с обоими типами.
>>> b = b"a,B,c,D"
>>> u = "a,B,c,D"
>>> type(b)
<class 'bytes'>
>>> type(u)
<class 'str'>


С ними можно работать как с массивами. Причём если str по индексу возвращает символ, то bytes - число, и для преобразования его в символ придётся воспользоваться функцией chr.
>>> b[0]
97
>>> chr(b[0])
'a'
>>> u[0]
'a'

Диапазоны тоже работают. Отрицательный индекс означает отсчет с конца.
>>> b[0:2]
b'a,'
>>> b[2:4]
b'B,'
>>> b[1:4]
b',B,'
>>> u[1:4]
',B,'
>>> b[-1]
68
>>> b[:-1]
b'a,B,c,'
>>> b[:-2]
b'a,B,c'
>>> b[1:]
b',B,c,D'
>>> b[2:]
b'B,c,D'

count считает, сколько раз указанная строка находится внутри строки.
>>> u.count("a")
1
>>> u.count("A")
0
>>> b.count(b",")
3

decode у bytes преобразует байты в текст в соответствии с заданной кодировкой.
>>> ub = b.decode("utf-8")
>>> ub
'a,B,c,D'
>>> type(ub)
<class 'str'>

encode у str преобразует текст в байты.
>>> bu = u.encode("utf-8")
>>> bu
b'a,B,c,D'
>>> type(bu)
<class 'bytes'>

endswith проверяет, оканчивается ли строка/байты указанной строкой/байтами.
>>> b.endswith(b"C,d")
False
>>> b.endswith(b"c,D")
True

find ищет первое вхождение указанной строки или байтов в строке или байте. Возвращает позицию (счёт с 0) или -1, если ничего не нашлось. rfind — ищет с конца строки.
>>> b.find(b"c")
4
>>> u.rfind("c")
4

join — очень полезная функция. Она принимает массив и складывает все строки из него в одну большую строку, и разделителем между элементами является сама строка, из которой вызвали функцию.
>>> sep = ", "
>>> arr = ["Саша", "Женя", "Петя", "Вася"]
>>> sep.join(arr)
'Саша, Женя, Петя, Вася'
>>> ";".join( ["1","2"] )
'1;2'

lower и upper переводят в нижний и верхний регистр соответственно. Для типа bytes будет работать только с английскими буквами.
>>> b.lower()
b'a,b,c,d'
>>> u.upper()
'A,B,C,D'

replace заменяет в строке одну подстроку на другую.
>>> u.replace("a", "Ы")
'Ы,B,c,D'
>>> b.replace(b",", b" or ")
b'a or B or c or D'

rjust позволяет привести короткую строку к нужной длине путём добавления перед ней пробелов или указанного символа. Для заполнения нулями можно использовать функцию zfill.
>>> tm = "18:02:"
>>> sec = "6"
>>> tm + sec
'18:02:6'
>>> tm + sec.rjust(2, "0")
'18:02:06'
>>> tm + sec.zfill(2)
'18:02:06'
>>> b.rjust(20)
b' a,B,c,D'

split разбивает строку на несколько по указанной строке. Можно ограничить количество разбиений. rsplit разбивает строку с обратной стороны. Возвращает массив.
>>> b.split(b",")
[b'a', b'B', b'c', b'D']
>>> u.split(",", 1)
['a', 'B,c,D']
>>> u.split(",", 2)
['a', 'B', 'c,D']
>>> u.rsplit(",", 1)
['a,B,c', 'D']
>>> u.split("а нету такой подстроки!")
['a,B,c,D']

anonymous 23 августа 2013 г. 13:31
благодаря тебе стал немного понимать. спасибо.
anonymous 10 ноября 2013 г. 21:24
Спасибо, коротко и ясно)
anonymous 28 мая 2014 г. 23:11
Хорошая статья! спасибо автору!
anonymous 28 мая 2014 г. 23:11
Хорошая статья! спасибо автору!
anonymous 14 августа 2015 г. 16:01
Спс, были бы все такие справочники, без лишних букв ...
anonymous 7 марта 2016 г. 22:56
Красавчик!
anonymous 26 февраля 2018 г. 13:04
Молодец, лучшее описание и конкретные примеры!
Комментировать
Вы anonymous