Перейти до змісту

Робота з рядками (Strings) у Python

Оскільки рядки в Python є незмінними (immutable) об'єктами, жоден із методів не змінює вихідний рядок «на місці». Натомість кожен метод створює та повертає абсолютно новий рядок (або інший тип даних, наприклад, список чи логічне значення).

Нижче — найчастіше використовувані методи для роботи з текстовими даними: їхній опис, логіка використання та приклади.

1. Об'єднання та розбиття рядків

join(iterable)

  • Опис: метод викликається для рядка-роздільника. Він приймає послідовність (наприклад, список або кортеж) і об'єднує всі її елементи в один суцільний рядок, вставляючи між ними цей роздільник.
  • Де і для чого використовується: це найшвидший і найправильніший спосіб склеїти велику кількість рядків (набагато ефективніший за оператор +). Часто застосовується для форматування виводу, перетворення списку слів у речення, створення шляхів або генерації CSV-рядків.
words = ['Python', 'це', 'чудово']
sentence = ' '.join(words)  # об'єднання через пробіл
print(sentence)

csv_line = ','.join(['Яблуко', '10', '50.5'])
print(csv_line)

Результат:

Python це чудово
Яблуко,10,50.5

split(sep=None, maxsplit=-1)

  • Опис: розбиває рядок на підрядки (слова) за вказаним роздільником sep і повертає список цих підрядків. Якщо sep не вказано, рядок розбивається по всіх пробільних символах (пробіли, табуляція, символи нового рядка).
  • Де і для чого використовується: ідеально підходить для парсингу (аналізу) тексту: наприклад, коли потрібно розбити речення на окремі слова, витягти дані з рядка, де значення розділені комами, або прочитати вміст файлу по словах.
text = "one,two,three"
items = text.split(",")
print(items)

Результат:

['one', 'two', 'three']

2. Пошук та заміна

replace(old, new[, count])

  • Опис: повертає копію рядка, в якій усі входження підрядка old замінено на new. Необов'язковий параметр count дозволяє вказати максимальну кількість замін.
  • Де і для чого використовується: очищення даних (наприклад, видалення зайвих ком чи символів), виправлення помилок у тексті, масова заміна слів або форматування.
info = "Я люблю Java. Java — найкраща мова програмування."
new_info = info.replace("Java", "Python")
print(new_info)

Результат:

Я люблю Python. Python — найкраща мова програмування.

find(sub[, start[, end]])

  • Опис: шукає підрядок sub у рядку та повертає індекс (позицію) його першого входження. Якщо підрядок не знайдено, метод повертає -1.
  • Де і для чого використовується: коли потрібно дізнатися, чи є текст у рядку і де саме він знаходиться, щоб потім, наприклад, витягти частину рядка за допомогою зрізів (слайсів).

find() проти index()

Існує схожий метод index(), але він видає помилку ValueError, якщо підрядок не знайдено — тоді як find() просто повертає -1.

s = 'Berlin: 18.4 C'
pos = s.find(':')
print(pos)
print(s[:pos])  # вирізали все до двокрапки

Результат:

6
Berlin

Гачок: візуально однакові символи різних алфавітів

Кирилична С (укр./рос. «ес») і латинська C виглядають ідентично, але це різні символи для Python. Якщо шукати кириличну С у рядку, де насправді стоїть латинська C, find() мовчки поверне -1 — без жодної помилки, просто "не знайдено". Це поширена причина важкопомітних багів при змішуванні розкладок клавіатури.

s = 'Berlin: 18.4 C'  # тут "C" — латинська

print(s.find('С'))    # кирилична "С" → -1, підрядок "не знайдено"
print(s.find('C'))    # латинська "C" → 13, знайдено на позиції 13

Результат:

-1
13

Якщо результат find() виглядає неправильним, а підрядок "точно є" в тексті — перевірте, чи не набраний він символами з іншого алфавіту.

count(sub[, start[, end]])

  • Опис: повертає кількість входжень підрядка sub у рядок.
  • Де і для чого використовується: підрахунок частоти появи певних слів, символів або маркерів у тексті.
word = "Mississippi"
print(word.count("s"))

Результат:

4

3. Очищення та форматування тексту

strip([chars]), lstrip(), rstrip()

  • Опис: видаляють символи з країв рядка.
    • strip() прибирає символи з обох боків;
    • lstrip() — лише зліва;
    • rstrip() — лише справа.
    • Якщо символи не вказано, видаляються всі пробільні символи (включно з \n та \t).
  • Де і для чого використовується: завжди застосовується при обробці вводу від користувача (щоб випадковий пробіл не зламав логіку) або при читанні даних з файлів, щоб прибрати невидимі символи переходу на новий рядок.
user_input = "   Привіт, світ! \n"
clean_text = user_input.strip()
print(repr(clean_text))

Результат:

'Привіт, світ!'

lower() та upper()

  • Опис: lower() перетворює всі літери рядка на малі (нижній регістр), а upper() — на великі (верхній регістр).
  • Де і для чого використовується: нормалізація даних перед порівнянням. Якщо ви шукаєте слово "apple", користувач міг ввести "Apple", "APPLE" або "apple". Зведення всього до lower() робить пошук нечутливим до регістру.
answer = "YeS"
if answer.lower() == "yes":
    print("Користувач погодився!")

Результат:

Користувач погодився!

4. Перевірка вмісту

startswith(prefix) та endswith(suffix)

  • Опис: перевіряють, чи починається (startswith) або чи закінчується (endswith) рядок вказаним підрядком. Повертають логічне значення: True або False.
  • Де і для чого використовується: дуже корисні при роботі з файлами (наприклад, перевірка розширення файлу), парсингу логів (чи починається рядок зі слова "ERROR") або фільтрації веб-адрес (чи починається на "http").
filename = "report_2023.csv"
if filename.endswith(".csv"):
    print("Це файл формату CSV")

Результат:

Це файл формату CSV

isdigit(), isalpha(), isalnum()

  • Опис: група методів для перевірки характеру символів:
    • isdigit() — True, якщо рядок складається лише з цифр;
    • isalpha() — True, якщо рядок складається лише з літер;
    • isalnum() — True, якщо рядок складається з літер та/або цифр.
  • Де і для чого використовується: валідація даних перед тим, як їх конвертувати. Наприклад, перед викликом int("текст") варто перевірити, чи дійсно там лише цифри, щоб програма не впала з помилкою.
age_input = "25"
if age_input.isdigit():
    age = int(age_input)
    print(f"Ваш вік: {age}")
else:
    print("Будь ласка, введіть лише цифри.")

Результат:

Ваш вік: 25