Как разделить строку по пробелам python
Такую задачу всегда можно решить с помощью цикла. Но в Python есть метод .split() . Именно его обычно используют для разделения строки на части. В качестве разделителя можно использовать любой символ: пробел, запятую, перенос строки ( \n ) и т.д.
На выходе мы получим список строк:
str = 'how are you' str.split(' ') # ['how', 'are', 'you']
Пробел как разделитель можно не указывать. Метод .split() будет использовать параметр по умолчанию:
str = 'how are you?' str.split() # ['how', 'are', 'you']
Иногда перед тем, как разделить строку, необходимо избавиться от лишних знаков препинания:
str = 'Hi, how are you?' str[:-1].replace(',', '').split() # ['Hi', 'how', 'are', 'you']
Руководство по использованию метода split в Python
Строки — отличный инструмент в руках Python-разработчиков. В Python строка —
это последовательность символов в кавычках. Она может включать числа, буквы и
символы. С помощью Python строку можно разделить на список подстрок по
определенному разделителю. Это делается с помощью метода split .
В этом материале разберем особенности его использования.
Что делает split в Python?
Функция split сканирует всю строку и разделяет ее в случае нахождения разделителя.
В строке должен быть как минимум один разделитель. Им может выступать в том
числе и символ пробела. Пробел — разделитель по умолчанию.
Если параметр на задать, то разделение будет выполнено именно по символу
пробела.
Синтаксис функции следующий:
string.split(separator*, maxsplit*)
Параметр separator — необязательный, но он позволяет задать разделитель
вручную.
Параметр maxsplit определяет максимальное количество разделений. Значение по
умолчанию — -1, будут выполнены все разделения.
Как разделить строку в Python
Метод .split() разделяет основную строку по разделителю и возвращает список строк.
Разделить HTML на части, используя Python
Быстрая Python библиотека для разделения одного HTML файла на группу файлов меньшего размера в соответствии с заданными критериями
Используйте Python via .NET библиотеку для разделения HTML файлов на части. Вы можете интегрировать извлеченные HTML страницы с другими данными и в результате получить документы нужной вам формы и содержания. Разделение HTML на части упрощает совместную работу над HTML файлами.
Посмотреть фрагмент кода
Разделить HTML с помощью Python
Эта программная библиотека предоставляет Python разработчикам набор функций для разделения HTML файлов на части. Разделение HTML на отдельные файлы может использоваться для распараллеливания работы с разделами документа. Например, если над одним HTML документом работают несколько человек одновременно, то разделение HTML позволит им ускорить работу. Разделение HTML может быть частью технологии извлечения текста из HTML файлов и интеграции данных в автоматизированные информационные системы или базы данных.
Python библиотека предоставляет разработчикам все необходимые функции для разделения HTML на части и извлечения страниц в соответствии с заданным режимом. Это автономное решение для Python via .NET, которое не требует установки офисных пакетов Microsoft Word, Acrobat Reader или других приложений.
Разбить HTML файл на части в коде Python
Разделите содержимое HTML разными способами на Python. Вы можете использовать следующие режимы извлечения страниц для HTML файлов: ‘разделить по заголовкам’, ‘разделить по разделам’, ‘разделить страницу за страницей’, ‘разделить по диапазонам страниц’.
После разделения вашего HTML файла на части вы можете экспортировать результат в нужный формат, вызвав метод ‘Document.Save’. Вы также можете управлять тем, каким образом части HTML экспортируются в HTML форматы или EPUB, используя свойство ‘DocumentPartSavingCallback’, которое также позволит вам перенаправлять потоки вывода.
Легко разделяйте HTML документы с помощью нашего решения для Python via .NET. В следующем примере показано, как разделить HTML на Python:
Разделить строку на слова
Дана строка, состоящая из слов, разделенных символами, которые перечислены во второй строке. Показать все слова.
Желательно написать её понятно для новичка) Заранее спасибо
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как разделить строку на отдельные слова?
Надо разделить строку на отдельные слова. Например — ‘abc45def’ надо разделить на ‘abc’ и ‘def’.
Разделить строку из hex на строку из dec
Здравствуйте, задача легкая но я в python не разбираюсь и прошу сделать "с нуля". У меня есть.
Разделить строку на слова
Есть некая строка со словами: string stroka; И есть некоторая функция перегрузки: istream.
Разделить строку на слова
Здравствуйте, подскажите как разделить текст на слова. Текст вводит пользователь и он записывается.
Разделить строку на слова
Дано строку в которой слова разделены пробелами и разделительными знаками. Посчитать количество.
4615 / 2036 / 359
Регистрация: 17.03.2012
Сообщений: 10,102
Записей в блоге: 6
Есть два варианта.
1. Вручную.
Вам помогут:
1.1 Метод split, у строки. Но, т. к. она разбивает строку только по одному символу, понадобится
1.2 Функция itertools.chain, для прохода по уже разбитым строкам.
2. С помощью регулярных выражений, но тут я не силён.
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
Вы можете привести все ваши разделите к одному, используя str.replace(разделитель_i, новый_разделитель), а затем разбить строку по новому разделителю. Можно и через re.sub это сделать
1727 / 967 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
Сообщение было отмечено llatibro как решение
Решение
Я тут наворотил, но ioprst, предложил простое решение, я его тоже попробовал(нижний блок).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
s1 = 'дом, мыло:name@mail.ru, -Stop-,(проверка)/КОНЕЦ' s2 = ' ,:@.-()/' L = s1.split() for si in s2: LTemp = [] n = len(L) for i in range(n): l = L[i].split(str(si)) while 1: try: l.remove('') except ValueError: break #for k in l: # if LTemp = LTemp + l if i == n-1: L = LTemp[:] print(L) # Вариант предложенный ioprst s1 = 'дом, мыло:name@mail.ru, -Stop-,(проверка)/КОНЕЦ' s2 = ' ,:@.-()/' for sim in s2: s1 = s1.replace(str(sim), ',') L = s1.split(',') while 1: try: L.remove('') except ValueError: break print(L)
пример:
[‘дом’, ‘мыло’, ‘name’, ‘mail’, ‘ru’, ‘Stop’, ‘проверка’, ‘КОНЕЦ’]
[‘дом’, ‘мыло’, ‘name’, ‘mail’, ‘ru’, ‘Stop’, ‘проверка’, ‘КОНЕЦ’]
Блок try нужен, что бы удалить пустые строки, которые возникают в обоих вариантах.
Регистрация: 23.10.2018
Сообщений: 51
Записей в блоге: 3
а можно и так
1 2 3 4 5
s1 = 'дом, мыло:name@mail.ru, -Stop-,(проверка)/КОНЕЦ' s2 = ' ,:@.-()/' for i in s2: s1 = s1.replace(i, ' ') print(list(filter(None, s1.split())))
вывод
[‘дом’, ‘мыло’, ‘name’, ‘mail’, ‘ru’, ‘Stop’, ‘проверка’, ‘КОНЕЦ’]
870 / 651 / 250
Регистрация: 10.12.2016
Сообщений: 1,588
1 2 3 4 5
>>> s = '''Это: строка с разделителями, всякими-разными!''' >>> import re >>> [ i for i in re.split(r'\W+',s) if i] ['Это', 'строка', 'с', 'разделителями', 'всякими', 'разными'] >>>
4615 / 2036 / 359
Регистрация: 17.03.2012
Сообщений: 10,102
Записей в блоге: 6
Ручная разбивка, примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from itertools import chain s1 = 'house, soap:name@mail.ru, -Stop-,(verify)/END' s2 = ' ,:@.-()/' def split_list(str_list, sep): sp1 = [sp_item.split(sep) for sp_item in str_list] res = chain.from_iterable(sp1) return res tmp_splitted = [s1] for sep in s2: tmp_splitted = split_list(tmp_splitted, sep) print(list(tmp_splitted))
1052 / 656 / 394
Регистрация: 07.11.2015
Сообщений: 1,052
Сообщение было отмечено Рыжий Лис как решение
Решение
1 2 3 4 5 6
import re s1 = 'house, soap:name@mail.ru, -Stop-,(verify)/END' s2 = ' ,:@.-()/' print(re.split('[' + re.escape(s2) + ']+', s1))
Регистрация: 23.10.2018
Сообщений: 142
Спасибо конечно всем, но нужно чтобы пользователь сам вводил первую строку со словами и символами, а не готовую
Добавлено через 3 минуты
А также цифры/числа должны игнорироваться
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
Сообщение от llatibro
Спасибо конечно всем, но нужно чтобы пользователь сам вводил первую строку со словами и символами, а не готовую
Это очень сложно сделать, никто за это даже не возьмется. Так что вам самому проще загуглить метод input().
4974 / 3210 / 1125
Регистрация: 21.03.2016
Сообщений: 7,940
тупо отбором букв
1 2 3 4 5 6 7 8 9
word = '' str_ = 'house, soap:name@mail.ru, -Stop-, 123.14 555(verify)/END355' + ' '# input()+ ' ' for i in str_: if i.isalpha(): word += i else: if word: print(word) word = ''
house
soap
name
mail
ru
Stop
verify
END
>>>
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
Semen-Semenich, ТС нужно по заданным разделителям строку разбить, выходит, что если символа «@» нет в списке разделителей, такой вариант не подходит, т.к. нужно будет отобрать name@mail, если «:» и «.» есть в списке разделителей.
4974 / 3210 / 1125
Регистрация: 21.03.2016
Сообщений: 7,940
ioprst, упс упустил такой момент, ну в первый if добавить проверку символа на отсутствие в заданной строке символов
1 2 3 4 5 6 7
for i in str_: if i not in s2 and not i.isdigit(): word += i else: if word: print(word) word = ''
1727 / 967 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
Сообщение от llatibro
Спасибо конечно всем, но нужно чтобы пользователь сам вводил первую строку со словами и символами, а не готовую
Сообщение от llatibro
А также цифры/числа должны игнорироваться
Для начала Вы бы должны были извиниться, что в начале дали не полное условие задачи.
И благодарность тем, кто дал Вам решение задачи, было бы не слово спасибо, а оценка их решения в соответствии с правилами форума. Как например пометка «лучший ответ». Я бы на их месте завел как и я черный список и больше не помогал тем, которые не благодарят за решение способами в соответствии с правилами форума
Регистрация: 23.10.2018
Сообщений: 142
Прошу прощения. Условие задачи было дано таким. Только потом я выяснил, что нужно самому выводить числа; с этим я уже разобрался. На форуме недавно, еще не привык ко всему.
Добавлено через 1 минуту
Пока я не могу выбрать кто из вас помог мне больше, поэтому лучший ответ не смог присудить. Дело времени)
Добавлено через 2 минуты
Также хотелось бы обратиться конкретно к вам с вопросом, Viktorrus. Не могли бы вы обьяснить: что означает двоеточие в квадратных скобках перед выводом L?
А еще не совсем понятно наличие запятой в скобках после replace и split (Я про вариант, предложенный ioprst)
198 / 85 / 15
Регистрация: 27.07.2018
Сообщений: 323
llatibro, насколько я понял, то вот моей решение:
1 2 3
string = input() # Строка symbolR = input() # Символ разделитель print(string.split(symbolR)) # Выводит строку разделенную символом, который тебе нужен.
1727 / 967 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
llatibro, Вы спрашиваете про строку L = LTemp[:] ? Само выражение LTemp[:] — это срез списка. Когда не указаны начало и конец среза, то срез возвращает копию того списка, срез которого делается. Зачем здесь используется срез для копирования а не просто L = LTemp? L и LTemp это переменные, которые , в отличие от других языков, не содержат значения в виде объектов, а являются ссылками на объекты, в данном случае на списки. Причем списки являются изменяемыми объектами. Это значит сам объект может оставаться одним и тем же, а его составные части могут меняться. Так вот, когда мы пишем L = LTemp мы не копируем объект, а устанавливаем в переменной L ссылку на тот же объект на который ссылается LTemp. И если бы в LTemp мы бы изменили бы содержимое списка, то это бы отразилось и в L, так как они ссылаются на один объект. Но в данном случае, мы во внешнем цикле не меняем содержимое объекта, на который ссылается LTemp, а заменяем объект на который ссылается LTemp. Теперь LTemp ссылается на другой объект в памяти, который является новым пустым списком LTemp = []. При этом L остается ссылаться на предыдущий список, который не пустой. Получается я здесь перестраховался и скопировал список L = LTemp[:], вместо того, что бы просто перенаправить ссылку L = LTemp. Мое действие не является ошибкой, но излишне. Программа будет правильно работать и так, и так.
Добавлено через 16 минут
Запятая в s1 = s1.replace(str(sim), ‘,’) , это аргумент ‘,’ в методе replace
str.replace(old, new[, maxcount]) -> s
old — Искомая подстрока, которую следует заменить.
new — Подстрока, на которую следует заменить искомую.
maxcount=None — Максимальное требуемое количество замен. Если не указано, будут заменены все вхождения искомой строки.
s — Новая строка с заменой старых подстрок на новые
То есть мы заменяем в исходной строке символ sim на запятую.
В s1.split(‘,’) запятая тоже аргумент, показывающий какой символ мы используем, что бы разбить исходную строку на части разделяемые этим символом.
str.split(sep=None, maxsplit=-1) -> list
sep — Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов. (по умолчанию строка разбивается на группы по символам пробела, табуляции или перевода строки)
Пробельные символы — это набор символов, а не только сам символ пробела.
К ним относятся: возврат каретки, перевод строки, табуляция, и различные виды пробелов.
maxsplit — Максимальное количество разбиений, которое требуется выполнить. Если -1, то количество разбиений не ограничено.
list — список текстовых строк