Рубріки: Теорія

Метод split(): всі способи, як розділити рядок у Python, з прикладами

Сергій Бондаренко

Що таке split() у Python

Метод split() у Python використовується для розділення рядка на підрядки на основі заданого роздільника. 

Цей метод повертає список підрядків, отриманих шляхом поділу вихідного рядка.

split() — один із вбудованих інструментів для роботи з рядками Python, дуже корисний при обробці тексту.

Призначення методу split()

Оскільки метод split() обробляє текст, відповідно й завдання, які можна вирішувати за його допомогою, належать до аналізу текстових даних:

  • Розділяти рядок на слова для подальшої обробки кожного слова окремо.
  • Ділити рядки на підрядки за певним символом або набором символів для подальшої обробки кожного підрядка окремо.
  • Розділяти рядки на підрядки за певним роздільником для отримання списку значень. Наприклад, під час читання даних із файлу CSV.
  • Розділяти рядки на підрядки за певним роздільником для отримання списку параметрів, наприклад, при обробці URL-адресів. Посилання можна «ділити» на окремі елементи, такі як протокол, ім’я хоста, шлях до ресурса тощо.
  • Ідентифікувати шляхи для файлової системи, відокремлюючи назви директорій та імена файлів.
  • Ділити рядки на підрядки за певним роздільником для отримання списку команд, наприклад, при обробці командного рядка.

Синтаксис функції split()

Перейдемо до синтаксису методу split(). Він виглядає так:

string.split([separator[, maxsplit]])

У цьому записі:

  • string це рядок, який потрібно розділити.
  • separator — роздільник, яким потрібно розділити рядок. Вказувати його необов’язково. Якщо сепаратор не вказаний, то у якості роздільника використовується пробіл.
  • maxsplit параметр, що вказує на максимальну кількість поділів, які потрібно зробити. Його також можна не вказувати. Якщо цей параметр не визначено, рядок, який редагується, буде розділений на всі можливі підрядки.

Найпростіший приклад використання методу split()

Розглянемо найпростіший приклад використання методу split(). Припустимо, у нас є рядок, який містить список слів, розділених пробілами:

sentence = "This is a simple sentence."

Ми можемо розділити цей рядок на окремі слова, використовуючи метод split():

words = sentence.split()

print(words)

Цей код виведе список слів, розділених пробілами:

['This', 'is', 'a', 'simple', 'sentence.']

У цьому прикладі метод split() розбиває рядок sentence на підрядки пробілами та повертає список підрядків. Таким чином, ми отримуємо список words, який містить усі слова з вихідного рядка.

Поділ рядків за кількома роздільниками

Метод split() у Python дозволяє розділяти рядки на підрядки по одному роздільнику. Але якщо потрібно розділити рядок за кількома роздільниками, можна скористатися іншими методами.

Розглянемо кілька способів поділу рядка за кількома роздільниками.

Використання регулярних виразів

Один із найуніверсальніших способів поділу рядка за декількома роздільниками — використання регулярних виразів. Для цього потрібно застосувати модуль re та функцію re.split().

Наприклад, щоб розділити рядок за комами та крапками, можна використати наступний код:

import re

s = "Bondarenko,Markova.Velichko,Tkachenko"
words = re.split("[,.]", s)
print(words)  # ['Bondarenko', 'Markova', 'Velichko', 'Tkachenko']

У цьому прикладі ми застосували регулярний вираз [,.], який означає «розділювачі — коми та крапки». Функція re.split() розділяє рядок s на підрядки за цими роздільниками та повертає список рядків.

Використання методу replace()

Якщо потрібно розділити рядок за кількома роздільниками, які відомі заздалегідь, можна скористатися методом replace(). Спочатку потрібно замінити всі роздільники на той самий символ, а потім застосувати метод split() для розділення рядка по цьому символу.

Наприклад, щоб розділити рядок за комами та крапками, можна використати наступний код:

s = "Bondarenko,Markova.Velichko,Tkachenko"
s = s.replace(",", ".")  # замінюємо коми на крапки
words = s.split(".")
print(words)  # ['Bondarenko', 'Markova', 'Velichko', 'Tkachenko']

У цьому прикладі ми замінюємо всі коми на крапки за допомогою методу replace(), а потім розділяємо рядок по крапках за допомогою методу split().

Навчися комбінувати різні методи Python у своєму коді на вечірніх курсах від Mate Academy. Також доступний формат повного дня з оплатою після працевлаштування.

Використання генератора списку

Ще один спосіб поділу рядка за декількома роздільниками — використання генератора списку. Для цього потрібно створити список роздільників і потім застосувати метод join() для об’єднання підрядків.

Наприклад, щоб розділити рядок за комами та крапками, можна використати наступний код:

s = "Bondarenko,Markova.Velichko,Tkachenko"
separators = [",", "."]
for sep in separators:
    s = s.replace(sep, separators[0])
words = s.split(separators[0])
print(words)  # ['Bondarenko', 'Markova', 'Velichko', 'Tkachenko']

Тут ми створюємо список separators із роздільниками та замінюємо всі роздільники на перший роздільник у списку. Потім ми розділяємо рядок по першому роздільнику за допомогою методу split().

Парсинг CSV

Конкретний приклад поділу рядків за декількома роздільниками може бути використаний, припустимо, для парсингу інформації про товари з CSV-файлу.

Візьмемо CSV-файл з інформацією про товари, де поля розділені комою та крапкою з комою. Ми можемо використати метод split() для розбиття рядка на частини за цими роздільниками:

import csv

with open('products.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';', quotechar='"')
    for row in reader:
        name, description, price = row[0].split(','), row[1].split('.'), row[2]
        # далі можна обробляти отримані данні
        # наприклад, додати товар в базу даних інтернет-магазину

Цей код відкриває файл products.csv та створює читача CSV-файлу з роздільником ; та лапкою-обмежувачем ". Потім він перебирає кожен рядок файлу за допомогою циклу for і звертається до методу split() для розділення значень поля.

Наступні рядки коду показують, як можна використовувати результати split() для окремого поділу імені, опису та ціни товару. Розглянемо цей фрагмент коду:

name, description, price = row[0].split(','), row[1].split('.'), row[2]

В ньому:

  • рядок row[0] містить значення поля "Назва товару";
  • рядок row[1] містить значення поля "Опис";
  • рядок row[2] містить значення поля "Ціна".

Ми викликаємо метод split() для кожного рядка, щоб поділити його на окремі компоненти:

  • для рядка "Назва товару" ми використовуємо , як роздільник;
  • для рядка "Опис" ми використовуємо .;
  • для рядка "Ціна" ніякий роздільник не потрібний.

Ми зберігаємо результати split() в окремі змінні: name, description та price відповідно. Далі може знадобитися додаткова обробка даних, наприклад, перетворення з рядкового формату в потрібний тип даних та збереження їх у базу даних інтернет-магазину.

Приклад обробки URL-адреси

Якщо ви займаєтеся аналітикою, витягуєте адреси з вебпрограми або проводите персоналізацію за URL-адресою, ви можете використовувати наступний підхід: 

url = "https://www.example.com/products/item1?id=12345&color=blue"

# Розділяємо URL-адресу на дві частини: доменне ім'я і решту
domain, rest_of_url = url.split("://")

# Поділяємо частину URL, що залишилас, на шлях та параметри запиту
path, query_params = rest_of_url.split("?")

# Розділяємо параметри запиту на ключі та значення
params_list = query_params.split("&")
params_dict = {}
for param in params_list:
    key, value = param.split("=")
    params_dict[key] = value

# Выводимо результати
print("Domain:", domain)  # "www.example.com"
print("Path:", path)  # "/products/item1"
print("Query params:", params_dict)  # {"id": "12345", "color": "blue"}

У цьому прикладі ми починаємо з URL-адреси https://www.example.com/products/item1?id=12345&color=blue. За допомогою split() ми поділяємо його на доменне ім’я www.example.com та іншу частину products/item1?id=12345&color=blue.

Потім ми розділяємо частину на шлях /products/item1 та параметри запиту id=12345&color=blue. Використовуючи split() ще раз, ми поділяємо параметри запиту на ключі та значення, зберігаємо їх у словнику params_dict, після чого виводимо результати.

Як розділити рядок посередині

Завдання поділу рядка тексту суворо посередині — не таке тривіальне, як здається. Справа в тому, що якщо ділити рядок навпіл зрізом за кількістю символів у ньому, то може виникнути проблема, коли середина рядка потрапить на якесь слово і результат виявиться нелогічним.

Наприклад:

s = "HighloadToday є одним з популярних онлайн-ресурсів про IT"

half = len(s) // 2
s1, s2 = s[:half], s[half:]
print("")
print(s1)
print(s2)
print("")
print('Довжина рядка була',len(s))

На екрані бачимо:

HighloadToday є одним з попу

лярних онлайн-ресурсів про


Довжина рядка була 57

Щоб виключити таку помилку, можна використати інший алгоритм поділу тексту:

  • ініціалізуємо рядок, який ділитимемо, на дві половини за словами;
  • розбиваємо рядок на окремі слова та зберігаємо їх у списку words;
  • визначаємо індекс середини списку words, використовуючи оператор цілісного поділу;
  • створюємо першу половину рядка, об’єднуючи слова зі списку words за middle_index за допомогою методу join();
  • створюємо другу половину рядка, поєднуючи слова зі списку words після middle_index за допомогою методу join();
  • виводимо на екран першу, а потім другу половину рядка.

Ось приклад коду, який поділяє рядок за цією логікою:

string = "HighloadToday є одним з популярних онлайн-ресурсів про IT"
words = string.split()
middle_index = len(words) // 2
first_half = " ".join(words[:middle_index])
second_half = " ".join(words[middle_index:])

print("")
print(first_half)  # HighloadToday є одним з
print(second_half)  # популярних онлайн-ресурсів про IT

Висновок

Метод split() — зручний та швидкий спосіб роботи з текстом у Python. Він може значно скоротити код та підвищити його читальність, що особливо важливо для великих та складних проектів.

Вивчаєш Python самостійно? З ментором це буде значно швидше. Приходь на курс Python Basic від Hillel, якщо ти зовсім новачок, або Python Pro, якщо прагнеш вдосконалити знання.

Останні статті

Brave1 збільшив гранти для оборонних розробок: можна отримати до 2 млн гривень

Кластер Brave1 збільшує гранти для оборонних розробок — тепер можна отримати від 500 тис до…

10.05.2024

Softserve, Luxoft та Infopulse. З’явився рейтинг найбільших платників податків серед IT-компаній

За 2023 рік IT-компанії сплатили сплатили в державний бюджет 20,8 мільярда гривень податків. Це 7,4%…

10.05.2024

«За заслуги перед компанією»: Microsoft розморозить підвищення зарплат співробітникам

Корпорація Microsoft планує відновити підвищення зарплат для найбільш ефективних співробітників. Про це повідомив Insider. Вірогідне…

10.05.2024

Мінекономіки запустило пільгові гранти для виробників дронів

Міністерство економіки запропонувало виробникам дронів пільгові гранти від держави за програмою «Переробка». Про це йдеться…

09.05.2024

Дочекалися. В квітні попит на айтівців без досвіду був вищий, ніж на досвідчених фахівців

В квітні попит на недосвідчених айтівців був вищий, аніж на тих, хто має 3-4 роки…

09.05.2024

Dell буде відстежувати переміщення та присвоювати рейтинг «прогульникам» офісу

Американська компанія Dell після зміни політики щодо ремоуту посилює контроль за працівниками. Зокрема, відстежує фізичне…

09.05.2024