Руководство по использованию метода split в Python
Строки — отличный инструмент в руках Python-разработчиков. В Python строка —
это последовательность символов в кавычках. Она может включать числа, буквы и
символы. С помощью Python строку можно разделить на список подстрок по
определенному разделителю. Это делается с помощью метода split .
В этом материале разберем особенности его использования.
Что делает split в Python?
Функция split сканирует всю строку и разделяет ее в случае нахождения разделителя.
В строке должен быть как минимум один разделитель. Им может выступать в том
числе и символ пробела. Пробел — разделитель по умолчанию.
Если параметр на задать, то разделение будет выполнено именно по символу
пробела.
Синтаксис функции следующий:
string.split(separator*, maxsplit*)
Параметр separator — необязательный, но он позволяет задать разделитель
вручную.
Параметр maxsplit определяет максимальное количество разделений. Значение по
умолчанию — -1, будут выполнены все разделения.
Как разделить строку в Python
Метод .split() разделяет основную строку по разделителю и возвращает список строк.
Как разбить строку на символы в Python
Сейчас мы разберем, как в Python можно разбить строку на символы. В общем, все что нам нужно, это создать такую функцию (назовем ее, например, split() ), которая будет решать эту задачу. Если вы новичок в функциях, то можете ознакомиться с базовыми принципами их создания на нашем сайте.
Чтобы понять, о чем речь, возьмем конкретный пример. Допустим, у нас есть следующая строка: «Hdfs Tutorial». И мы хотим разбить ее на отдельные символы, используя язык Python. Давайте поищем способы, как лучше это сделать.
Вход: “Hdfs Tutorial” Результат: [‘H’, ‘d’, ‘f’, ‘s’, ‘ ‘, ‘T’, ‘u’, ‘t’, ‘o’, ‘r’, ‘i’, ‘a’, ‘l’]
1. Определяемая пользователем функция
Здесь я создам функцию под названием split() , которая принимает на вход один аргумент, например, нашу строку, и возвращает список всех символов, имеющихся в этой строке.
def split(s): return [char for char in s]
Сейчас мы создали собственную функцию под названием split() , принимающую один аргумент — строку, которую мы хотим разбить на символы.
Теперь нам надо задать строку, которую мы хотим разбить на символы.
s = 'Hdfs Tutorial' print(s)
Результат
Hdfs Tutorial
Теперь просто вызовем нашу функцию, передав в нее только что определенную нами строку.
split(s)
Результат
[‘H’, ‘d’, ‘f’, ‘s’, ‘ ‘, ‘T’, ‘u’, ‘t’, ‘o’, ‘r’, ‘i’, ‘a’, ‘l’]
Вот и все! Это простейший способ разбить строку на символы в языке Python. Однако, как это обычно бывает в Python, есть еще несколько способов сделать то же самое. И сейчас мы по-быстрому разберем пару таких примеров.
2. Функция list()
Мы можем использовать встроенную функцию list() , которая сделает ровно то же самое.
s = 'Hdfs Tutorial' list(s)
Резльтат
[‘H’, ‘d’, ‘f’, ‘s’, ‘ ‘, ‘T’, ‘u’, ‘t’, ‘o’, ‘r’, ‘i’, ‘a’, ‘l’]
3. Разбиение строки на символы с использованием цикла for
Также можно разбить строку на символы при помощи цикла for , который мы использовали в теле функции split() , не определяя самой функции. Этот способ рекомендован лишь для специального использования и, как правило, не подходит для промышленного применения.
s = 'Hdfs Tutorial' [c for c in s]
Результат
[‘H’, ‘d’, ‘f’, ‘s’, ‘ ‘, ‘T’, ‘u’, ‘t’, ‘o’, ‘r’, ‘i’, ‘a’, ‘l’]
Заключение
Это было очень краткое руководство о том, как разбить строку на символы в Python. Мы обсудили три простых способа, как это сделать. Лично я предпочитаю первый метод, так как он дает гораздо больше гибкости.
Построчные чтение и запись — Python: Основы текстового ввода-вывода
В предыдущем уроке мы упоминали, что последовательные вызовы метода write дописывают текст в конец. Но часто мы имеем итератор, выдающий некий текст построчно. Можно, конечно, написать цикл, однако есть способ и получше: метод writelines . Работает он так:
f = open("foo.txt", "w") f.writelines(["cat\n", "dog\n"]) f.close() f = open("foo.txt", "r") print(f.read()) # => cat # => dog f.close()
Как вы видите, все строчки записались в нужном порядке. Такой вариант записи предпочтителен, когда нужно записать большой объем текста, который вы получаете и обрабатываете строчка-за-строчкой. Можно предварительно накопить весь текст в одну большую строку, однако для этого может потребоваться большой объём памяти. Гораздо лучше записывать строчки по мере готовности и writelines для этого подходит идеально!
Чтение файла построчно
Файл построчно можно не только писать, но и читать:
f = open("foo.txt") f.readline() # 'cat\n' f.readline() # 'dog\n' f.readline() # '' f.close()
Здесь Python сам понимает, что строчки в тексте нужно разделять по символу перевода строки. Вызов readline перемещает позицию к следующей строке и как только текст закончится, все последующие вызовы будут возвращать пустую строку.
Заметьте, строчки текста содержат и сами символы перевода строки.
Метод readline довольно удобен, когда мы хотим управлять процессом чтения из файла. Однако часто нужно просто прочитать все строчки текста. Для этого нужно всего навсего. проитерировать файловый объект! При этом вы получите итератор строчек, который можно читать в цикле:
f = open("foo.txt") for l in f: print(l) # => cat # => dog f.close()
Если не указать режим, как я сделал в этот раз, то файл откроется на чтение. Удобно.
Подумайте, почему напечатались лишние пустые строчки.
Итератор строчек файла, как и положено, ленив. Он вычитывает строки лишь по мере необходимости. А останавливается тогда, когда читать уже становится нечего.
Ленивость позволяет, в частности, не дочитать файл:
f = open("foo.txt") for l in f: print(l) break # => cat print(f.read()) # => dog f.close()
Если же нужно получить сразу все строчки текста в виде списка, то можно вызывать метод readlines и получить тот самый список.
Потоковая обработка больших файлов
Использование итераторов очень удобно для потоковой обработки файлов. При потоковой обработке нет необходимости хранить весь файл в памяти, а значит обрабатываемые файлы могут быть очень большими! Вот так может выглядеть скрипт, который нумерует строчки входного файла и записывает в выходной:
input_file = open("input.txt", "r") output_file = open("output.txt", "w") for i, line in enumerate(input_file, 1): output_file.write(f"i>) line>") input_file.close() output_file.close()
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как разбить строку на отдельные символы?
Как её разбить на отдельные символы? Понимаю, что data.split() , но только не понятно, что в split() писать. Заранее спасибо.
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
задан 12 ноя 2011 в 15:09
1,678 4 4 золотых знака 28 28 серебряных знаков 49 49 бронзовых знаков
10 ответов 10
Сортировка: Сброс на вариант по умолчанию
result = list(data)
Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
ответ дан 12 ноя 2011 в 16:23
889 7 7 серебряных знаков 17 17 бронзовых знаков
list() не нужно вызывать, data уже последовательность в Питоне. str это встроенное имя—лучше не использовать его как имя своей переменной.
28 ноя 2016 в 22:04
data уже является последовательностью ( data[i] работает). Ничего вызывать не надо.
К примеру, чтобы напечатать каждый символ на отдельной строке:
for char in text: print(char)
Что можно кратко записать: print(‘\n’.join(text)) . Если нужен именно Питон список, то просто chars = list(text) .
Если вы работаете с текстом, то используйте Unicode. Юникодные строки в Питоне являются неизменямыми последовательностями символов (Unicode code points).
Видимые пользователем буквы (grapheme clusters) могут состоять из нескольких символов, к примеру, ё буква может быть представлена как последовательность двух символов: U+435 U+308 в Unicode— u’\u0435\u0308′ в Питоне:
>>> print(u'\u0435\u0308') ё
Каждый символ может быть представлен в различных кодировках одним или несколькими байтами, к примеру, букву я (U+044F) можно закодировать в два байта: 11010001 10001111 в utf-8 кодировке:
>>> print(u'\u044f') я >>> u'\u044f'.encode('utf-8') b'\xd1\x8f' # два байта: 209, 143
Байты/байтовая строка ( bytes тип) это неизменяемая последовательность байт в Питоне.
str тип является bytes в Питоне 2. str является Unicode в Питоне 3.
Кроме того существует понятие code unit (8 бит в utf-8, 16 бит в utf-16). Строки в Javascript можно часто рассматривать как последовательности utf-16 code unit (может иметь значение при переносе функциональности в Питон), к примеру, смайлик (U+1F602) символ представлен как два code unit: D83D DE02 в utf-16(BE) кодировке:
>>> print(u'\U0001F602') >>> u'\U0001F602'.encode('utf-16be') b'\xd8=\xde\x02' # четыре байта: 216, 61, 222, 2
То есть, если у вас текст, представленный как str в Питоне 3 (Юникод), то вы можете его рассматривать как различные последовательности в зависимости от задачи:
>>> import regex # $ pip install regex >>> text = 'я ё' # 6 code points >>> print(ascii(text)) '\u044f \U0001f602 \u0435\u0308' >>> regex.findall(r'\X', text) # 5 grapheme clusters ['я', ' ', '', ' ', 'ё'] # 5 user-perceived characters >>> utf16codeunits(text) # 7 utf-16 code units (1103, 32, 55357, 56834, 32, 1077, 776) >>> text.encode('utf-16be') # 14 bytes in utf-16 b'\x04O\x00 \xd8=\xde\x02\x00 \x045\x03\x08' >>> text.encode('utf-8') # 12 bytes in utf-8 b'\xd1\x8f \xf0\x9f\x98\x82 \xd0\xb5\xcc\x88'
