Метод 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, якщо прагнеш вдосконалити знання.
Favbet Tech – це ІТ-компанія зі 100% украінською ДНК, що створює досконалі сервіси для iGaming і Betting з використанням передових технологіи та надає доступ до них. Favbet Tech розробляє інноваційне програмне забезпечення через складну багатокомпонентну платформу, яка здатна витримувати величезні навантаження та створювати унікальний досвід для гравців.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: