Разбиение строк через split() в Python

35.9K

Метод Python split() разбивает строку на части, используя специальный разделитель, и возвращает эти части в виде списка.

Синтаксис метода split():

str.split([разделитель [, maxsplit]])

_____________________________________________________________________________________________________

В методе split() используется не более двух параметров:

  • разделитель (необязательный параметр) – строка разбивается на части с помощью указанного символа. Если разделитель не задан, то любая пробельная строка (пробел, новая строка и т.д.) считается разделителем;
  • maxsplit (необязательный параметр) определяет максимальное количество частей.

Если в maxsplit имеет значение -1 то, что количество разбиений строки неограниченно.
______________________________________________________________________________________________________

Метод Python split string разбивает строку с помощью указанного спецсимвола и возвращает список подстрок.
______________________________________________________________________________________________________

Пример 1: Как split() работает в Python?

text= 'Love thy neighbor'
# разделяем строку
print(text.split())
grocery = 'Milk, Chicken, Bread'
# разделяем запятой
print(grocery.split(', '))
# разделяем двоеточием
print(grocery.split(':'))

В результате выполнения данной программы с Python split методом вы увидите:

['Love', 'thy', 'neighbor']
['Milk', 'Chicken', 'Bread']
['Milk, Chicken, Bread']

______________________________________________________________________________________________________

Пример 2: Выполнение split() при заданном maxsplit:

grocery = 'Milk, Chicken, Bread, Butter'
# maxsplit: 2
print(grocery.split(', ', 2))
# maxsplit: 1
print(grocery.split(', ', 1))
# maxsplit: 5
print(grocery.split(', ', 5))
# maxsplit: 0
print(grocery.split(', ', 0))

На выходе получаем результат выполнения метода split Python 3:

['Milk', 'Chicken', 'Bread, Butter']
['Milk', 'Chicken, Bread, Butter']
['Milk', 'Chicken', 'Bread', 'Butter']
['Milk, Chicken, Bread, Butter']

При заданном параметре maxsplit максимальное количество элементов в списке равно maxsplit+1.

Данная публикация представляет собой перевод статьи «Python String split()» , подготовленной дружной командой проекта Интернет-технологии.ру

www.internet-technologies.ru

Разделить строку на список подстрок в python

Если нужно распарсить строку по какому-то символу, то в простом случае можно воспользоваться функцией split(separator=’ ‘):

a = 'python,django,templates'
b = a.split(',')  # b = ['python', 'django', 'templates']

Но если у нас задача посложнее, например:

a = 'python, django, template   tags'
b = a.split(',')  # b = ['python', ' django', ' template   tags']

то появится проблема лишних пробелов.

Итак, рассмотрим следующую задачу: есть форма с одним полем categories, данные которого можно записывать как через запятую, так и каждую с новой строки. Нужно сформировать список введённых данных. Например, данные поля имеют вид:

python, django cms,   template   tags


templates

Видим, что первая строчка состоит из трех элементов, затем лишние абзацы и, наконец, ещё одна категория. С помощью следующего кода можно распарсить данные:

data = form.cleaned_data.get('categories')

categories = []
rows = data.splitlines()  # разбиваем на строки
for row in rows:
    if row:  # избавляемся от пустых строк
        [categories.append(' '.join(item.split())) for item in row.split(',') if item]

Результат выполнения кода:

categories = ['python', 'django cms', 'template tags', 'templates']

Немного прокомментирую код:

  • Для разбиения строк используем splitlines(), который — похож на split(), но использует в качестве разделителя символы перевода каретки (\n и \r).
  • Условием if row отсекаем пустые строки.
  • Последней строкой кода мы используем генератор списка (без присваивания к переменной — оно нам не надо), чтобы компактнее записать код:
    • row.split(‘,’) разбивает строку, используя запятую в качестве разделителя.
    • ‘ ‘.join(item.split()) удаляет лишние пробелы между словами

Данный код не претендует на идеальность, но он достаточно читабельный — может, кому и пригодится!

Оцените статью

4.5 из 5 (всего 4 оценки)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

После нажатия кнопки «Отправить» ваше сообщение будет доставлено мне на почту.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/it/split-python/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="https://vivazzi.pro/it/split-python/">https://vivazzi.pro/it/split-python/</a>

Подробнее: Правила использования сайта

Похожие статьи:

vivazzi.pro

python — Как разбить строку на отдельные символы?








Stack Overflow на русском



  1. 0


  2. +0



    • Тур

      Начните с этой страницы, чтобы быстро ознакомиться с сайтом



    • Справка

      Подробные ответы на любые возможные вопросы



    • Мета

      Обсудить принципы работы и политику сайта



    • О нас

      Узнать больше о компании Stack Overflow



    • Бизнес

      Узнать больше о поиске разработчиков или рекламе на сайте





  3. Войти
    Регистрация



  4. текущее сообщество




    • Stack Overflow на русском

      справка
      чат





ru.stackoverflow.com

Как использовать Split в Python

Метод Split() в Python возвращает список слов в строке / строке, разделенных строкой разделителя.

Разбиение строки Split

Метод split() в Python без аргумента разбивается на пробелы.

Пример:

str = «This is a test»
print(str.split())



str = «This is a test»

print(str.split())

Вывод:

[‘This’, ‘is’, ‘a’, ‘test’]



[‘This’, ‘is’, ‘a’, ‘test’]

Разделение на первое вхождение

В следующем примере он будет разделен только на 2 пробела.

Пример:

str = «This is a test»
print(str.split(» «,2))



str = «This is a test»

print(str.split(» «,2))

Вывод:

Разделение строк из текстового файла в Python

Следующая программа Python, читающая текстовый файл и разбивающая его на отдельные слова в Python.

Пример:

with open(«my_file.txt», «r») as my_file:
for line in my_file:
str = line.split()
print(str)



with open(«my_file.txt», «r») as my_file:

for line in my_file:

str = line.split()

print(str)

Разбиение строки на новую строку (\ n)

str = «This \nis \na \ntest»
print(str)
print(«\nAfter Split\n»)
print(str.split())



str = «This \nis \na \ntest»

print(str)

print(«\nAfter Split\n»)

print(str.split())

Вывод:

This
is
a
test
After Split
[‘This’, ‘is’, ‘a’, ‘test’]



This

is

a

test

After Split

[‘This’, ‘is’, ‘a’, ‘test’]

Разбиение строки по вкладке (\ t)

str = «This \tis \ta \ttest»
print(str)
print(«\nAfter Split\n»)
print(str.split())



str = «This \tis \ta \ttest»

print(str)

print(«\nAfter Split\n»)

print(str.split())

Вывод:

This is a test
After Split
[‘This’, ‘is’, ‘a’, ‘test’]



This is a test

After Split

[‘This’, ‘is’, ‘a’, ‘test’]

Разбиение строки запятой (,)

str = «This,is,a,test»
print(str.split(«,»))



str = «This,is,a,test»

print(str.split(«,»))

Вывод:

[‘This’, ‘is’, ‘a’, ‘test’]



[‘This’, ‘is’, ‘a’, ‘test’]

Разделить строку с несколькими разделителями

В этом случае Python использует регулярное выражение.

Пример:

import re
str = «This,isa;test»
print(re.split(«,;»,str))



import re

str = «This,isa;test»

print(re.split(«,;»,str))

Вывод:

[‘This’, ‘is’, ‘a’, ‘test’]



[‘This’, ‘is’, ‘a’, ‘test’]

Разделить строку в список

Следующая программа Python разделяет строку на список.

Пример:

str = «This is a test»
lst = str.split()
for st in lst:
print(st)



str = «This is a test»

lst = str.split()

for st in lst:

print(st)

Вывод:

 

 

Источник: net-informations.com

bunkerbook.ru

python — Как разделить строку на список слов разделённых пробелами?








Stack Overflow на русском



  1. 0


  2. +0



    • Тур

      Начните с этой страницы, чтобы быстро ознакомиться с сайтом



    • Справка

      Подробные ответы на любые возможные вопросы



    • Мета

      Обсудить принципы работы и политику сайта



    • О нас

      Узнать больше о компании Stack Overflow



    • Бизнес

      Узнать больше о поиске разработчиков или рекламе на сайте





  3. Войти
    Регистрация



  4. текущее сообщество




    • Stack Overflow на русском

      справка
      чат







    • Stack Overflow на русском Meta


ru.stackoverflow.com

🔵 Разделить строку на слова и вывести их на печать по одному

Разделить строку на слова и вывести их на печать по одному

1.18K просмотра

Как сделать программу, используя функцию. Вводишь строку из несколько слов с пробелами. Находишь все слова и выводишь все слова отдельными строчками. Что я делаю не так?

str1 = str(input())
i = 0
k = 0
list = []
 
def space(str1):
 return(str1)
 while k <= len(str1):
  if str1(i) != " ":
   list.append(str(i))
   return(list)
  i += 1
  k += 1
 
mini_list = space(str1)
print(mini_list)

6
Answers

Python
Опубликовано 22.07.2019

Вот так можно:

single_line = raw_input()
 
# разбить по пробелам, склеить обратно по LFам
words_in_lines = '\n'.join(single_line.split())
# если между словами ровно по одному пробелу
words_in_lines = single_line.replace(' ', '\n')
# если там серии пробелов
words_in_lines = re.sub(r'\s+', '\n', single_line)
 
print words_in_lines

Также можно обратиться к регуляркам:

text = input()  # "1 2   4         555"
 
import re
for x in re.split(r'\s+', text):
    print(x)

Консоль:

1
2
4
555

Это можно сделать значительно проще, пользуясь методами работы со строками:

new_list = my_str.split(' ')

А ваша не работает из-за return перед циклом, интерпретатор прекращает выполнять функцию, возвращает ответ и не входит в цикл, return надо переместить в конц функции.

Как сказал Igor Sergeevich можно воспользоватся стандартным методом для работы со строками. Но так как я вижу что вы пытаетесь сделать это в ручную, предложу такой вариант:

In [15]: def foo(string):
    ...:     Flag = False
    ...:     for i in string:
    ...:         if i != ' ':
    ...:             if Flag:
    ...:                 print()
    ...:             print(i, end='')
    ...:             Flag = False
    ...:         else:
    ...:             Flag = True

Использование:

In [18]: foo('string for example')

Результат:

string
for
example

Находишь все слова

Зря вы перебираете строку посимвольно в поисках пробелов.

  • Во-первых, бывают и другие пробельные символы, например, неразрывный пробел или табуляция. Они тоже разделяют строку на слова.
  • Во-вторых, для деления строки на слова в Python 3 есть метод str.split(). Он разбивает строку по заданному разделителю, а если не указывать разделитель (т.е. по умолчанию) — по пробельным символам (конкретно: space, tab, newline, return, formfeed). Возвращает список строк, на которые поделил исходную.

Вот так:

words = input().split()

Заметьте, что str(input()) не нужно, input() и так возвращает строку.

Чтобы вывести каждое слово, достаточно перебрать список и каждое напечатать.

for word in words:
    print(word)

Оба действия можно объединить для лаконичности:

for word in input().split():
    print(word)

Можно так:

list(map(print, input().split(' ')))

Напишите свой ответ на данный вопрос.

python-scripts.com

Основы Python — кратко. Строки. / Habr

Поскольку число положительных отзывов превысило число отрицательных, продолжу выкладывание уроков. Те кто уже знаком с основами — можете или просто пропустить урок, или попробовать сделать задание 3 самым коротким способом 🙂

Для начала маленькое замечание.

Начиная с Python 2.3, всем, кто использует не-ASCII кодировку нужно добавлять указание о кодировке в самом начале программы. Для русского языка это будет в основном:

# -*- coding: cp1251 -*-

или использовать для хранения исходных текстов файлы utf-8 (что предпочтительней).

Изучив управление числами, пришла пора осваивать строки. Пайтон обладает весьма богатым набором возможностей в этой области.

Строки


Строки могут быть заключены в одинарные или двойные кавычки, строки могут использовать esc-последовательности в стиле С, многострочные константы задаются в тройных кавычках.

>>> "habrahabr"
'habrahabr'
>>> 'foo bar boz'
'foo bar boz'
>>> "won't"
"won't"
>>> 'don"t'
'don"t'
>>> "couldn\"t"
'couldn"t'
>>> """multi line
... very long
... string constant"""
'multi line\nvery long\nstring constant'
>>> 'this takes \
... two lines'
'this takes two lines'

Строки можно склеивать оператором + и «размножать» оператором *

>>> "Hello "+"word"
'Hello word'
>>> "Hello "*3
'Hello Hello Hello '

По сути же своей строка представляет собой последовательность символов с произвольным доступом. Для получения части символов строки можно использовать т.н. оператор «среза». Обратите внимание, что нумерация начитается с нуля (и достаточно хаотична на первый взгляд).

>>> str = "Hello, cruel world!"
# получить 4 символ строки
>>> str[3] 
'l'
# все символы с 8 по 14
>>> str[7:14]
'cruel w'
# каждый второй символ со 2 по 13
>>> str[1:12:2]
'el,cul'
# некоторые значения можно опускать
# каждый второй символ строки.
>>> str[::2]
'Hlo re ol!'

Если опустить первый из трех параметров, он считается равным нулю, если опустить второй – срез будет продолжен до конца строки.


# первые 2 символа строки
>>> str[:2]
'He'
# вся строка кроме 2 первых символов
>>> str[2:]
'llo, cruel world!'

Срезы с неправильными границами обрабатываются следующим образом:
— если верхняя граница среза больше длины строки, то она уменьшается до длины строки
— если нижняя граница больше верхней, то возвращается пустая строка

Также срезы могут принимать отрицательные значения.


# последний символ
>>> str[-1]
'!' 
# второй символ с конца
>>> str[-2]
'd'
# два последних символа
>>> str[-2:]
'd!'
# все символы кроме последних двух
>>> str[:-2]
'Hello, cruel worl'

Лучший способ запомнить, как определяются индексы в срезе — считать их указывающими между символами, с номером 0 на левой границе первого символа. А правая граница последнего символа имеет индекс равный длине строки.
Для положительных символов длина строки равна разности между числами на границе.

Для определения длины строки используется функция len().

Unicode

В последних версиях Пайтон очень хорошо поддерживается работа с Unicode-строками.

Для задания unicode-строки в виде константы используется префикс u.

>>> uni = u"Тест"
>>> uni
u'\u0422\u0435\u0441\u0442'

Кроме того, Пайтон позволяет создать строку в Unicode с помощью одноименной функции.

>>> uni = unicode("Тест", "UTF-8")
>>> uni
u'\u0422\u0435\u0441\u0442'

Эта функция функция может работать с Latin-1, ASCII, UTF-8, UTF-16, с русскими кодировками ISO-8859-5, KOI8-R, CP1251, CP866 и Mac-cyrillic, и многими другими.

Для обратного преобразования служит метод encode, который преобразует unicode-строку в строку с заданной кодировкой.

>>> uni.encode("UTF-8")
'\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82'
>>> uni.encode("CP1251")
'\xd2\xe5\xf1\xf2'

Для преобразования строки в список по определенному разделителю, используется метод split.
Этот метод в качестве параметра запрашивает разделитель, а возвращает список отдельных «слов» по которому можно «пройти» в цикле for.

>>> str = "Mary has a little lamb"
>>> str.split(" ")
['Mary', 'has', 'a', 'little', 'lamb']
>>> for word in str.split(" "):
...     print word
...
Mary
has
a
little
lamb

Домашнее задание.

1. Написать программу, выводящую заданную пользователем строку как минимум в 3 разных кодировках. При этом писать вызов метода encode() в программе можно только 1 раз.

2. Написать программу поиска самого длинного слова в строке, разделенной пробелами.

3. (Повышенная сложность) Написать программу декодирования телефонного номера для АОН.

По запросу АОНа АТС посылает телефонный номер, используя следующие правила:

— Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена

— Каждая значащая цифра повторяется минимум 2 раза

— Если в номере идут несколько цифр подряд, то для обозначения «такая же цифра как предыдущая» используется идущий 2 или более подряд раз знак #

Например, входящая строка 4434###552222311333661 соответствует номеру 4452136

Кстати, регулярные выражения использовать в этих заданиях — нельзя 🙂

habr.com