Закрыть

Для эффективной работы на сайте используются cookie и обработка персональных данных. Пользуясь этим сайтом, вы соглашаетесь с правилами использования сайта. Подробнее

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Воображение — это самое главное, оно является отражением того, что мы притягиваем в свою жизнь.

Альберт Эйнштейн

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

5 июня 2016 г. 8:05

Если нужно распарсить строку по какому-то символу, то в простом случае можно воспользоваться функцией 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,7 из 5 (всего 3 оценки)

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

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

Автор статьи

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/it/split-python/:

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

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

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

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

Комментариев: 0

Вы можете оставить комментарий как незарегистрированный пользователь. Но, зарегистрировавшись, вы сможете получать оповещения об ответах, а также иметь доступ к своему личному аккаунту для просмотра своих комментариев.

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте