Алла Тамбовцева, НИУ ВШЭ
.split()
и .join()
¶Одни из самых распространённых методов на строках – методы .split()
и .join()
. Первый нужен для того, чтобы разбивать строку на части, а второй – чтобы, напротив, склеивать перечень строк в одну большую строку. Допустим, у нас есть строка с текстом и мы хотим разбить его на слова. Применим метод .split()
:
text = "Python is cool"
print(text.split())
['Python', 'is', 'cool']
По умолчанию .split()
разбивает строку по пробелу и возвращает список. Но в качестве аргумента можно указать любой набор символов:
words = text.split("is")
print(words)
['Python ', ' cool']
Строка была разбита по слову "is", само оно было исключено. Если мы хотим избавиться от лишних пробелов в начале и конце элементов списка, можно применить метод .strip()
:
one = words[0].strip()
two = words[1].strip()
print(one, two)
Python cool
Метод .join()
производит обратную операцию – конкатенацию строк. Он склеивает перечень строк в одну строку. Метод применяется к строке – разделителю, который мы будем использовать при склеивании, а в качестве аргумента указывается перечень строк (список или кортеж).
print("-".join(["A", "B", "C"]))
A-B-C
print("\n".join(["A", "B", "C"])) # \n – переход на новую строку
A B C
print("\t".join(["A", "B", "C"])) # \t – табуляция
A B C
text = "python is waiting for Anaconda."
Метод .capitalize()
делает первую букву строки заглавной (если на первом месте стоит другой символ – ничего не происходит), а метод .title()
производит ту же операцию для каждого слова в строке.
cap = text.capitalize()
print(cap)
Python is waiting for anaconda.
tit = text.title()
print(tit)
Python Is Waiting For Anaconda.
В Python довольно много методов, которые позволяют работать с регистром строки (верхний регистр – заглавные буквы, нижний регистр – строчные буквы). Так, метод .lower()
приводит всю строку к нижнему регистру, а метод .upper()
– к верхнему.
shout = text.upper()
print(shout)
PYTHON IS WAITING FOR ANACONDA.
whisper = text.lower()
print(whisper)
python is waiting for anaconda.
Кроме того, существует метод .swapcase()
, он меняет регистр каждого символа – если буква заглавная, он делает её строчной, если строчная – заглавной:
print(text.swapcase())
PYTHON IS WAITING FOR aNACONDA.
Если нам нужно заменить какой-то символ или подстроку в строке, пригодится метод .replace()
.
new = text.replace("n", "N") # что-заменяем, на что заменяем
print(new)
pythoN is waitiNg for ANacoNda.
Ещё один полезный метод – метод .zfill()
. Он расшифровывается как fill with zeroes и добавляет нули в начало строки, столько нулей, сколько нужно для получения строки заданной длины. Особенно актуален этот метод при работе с файлами. Если у нас есть 100 файлов с названиями вида 1.txt
, 2.txt
,100.txt
, правильно упорядочить по возрастанию их не получится: Python будет посимвольно сравнивать строки, и тогда файлы 1.txt
, 10.txt
и 100.txt
окажутся рядом, что противоречит выбранной сортировке. Проверим:
files = ["1.txt", "2.txt", "3.txt", "100.txt", "10.txt", "56.txt"]
print(sorted(files)) # неправильно!
['1.txt', '10.txt', '100.txt', '2.txt', '3.txt', '56.txt']
Изменим все названия на трёхзначные числа – дозаполним нулями:
# трёхзначное число + расширение .txt, всего 7 символов
files_new = []
for file in files:
files_new.append(file.zfill(7))
print(files_new)
['001.txt', '002.txt', '003.txt', '100.txt', '010.txt', '056.txt']
print(sorted(files_new)) # правильно!
['001.txt', '002.txt', '003.txt', '010.txt', '056.txt', '100.txt']