Урок 25. Наслідування

Ілюстрація з відео для пояснення потреби в наслідуванні:

#Навіщо нам наслідування?
class Person:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        
class Student:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        
person1 = Person("John", "Smith")
student1 = Student("Jenny", "Jackson")
print(person1.name, person1.surname)
print(student1.name,student1.surname)

Наслідування в Python — це один з основних принципів об’єктно-орієнтованого програмування, який дозволяє створювати нові класи на основі вже існуючих. Це дозволяє повторно використовувати код, спрощує його підтримку та забезпечує більш організовану структуру. Клас, який наслідується, називається “батьківським” (або “базовим”), а новий клас, що його наслідує, — “дочірнім”. Приклад з відео:

#Inheritance (наслідування) 
#дозволяє нам визначити клас, 
#який успадковує всі методи
#та властивості з іншого класу.
#Батьківський клас — це клас, який успадковується, 
#також називається базовим класом.
#Дочірній клас - це клас, який успадковує інший клас,
#також називається похідним класом.
class Person:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        
class Student(Person):
    pass
        
person1 = Person("John", "Smith")
student1 = Student("Jenny", "Jackson")
print(person1.name, person1.surname)
print(student1.name,student1.surname)

Функція super()

В Python є функція super(), яка дозволяє дочірньому класу наслідувати властивості від батьківського. Приклад з відео:

#Python також має функцію super(), 
#яка змусить дочірній клас успадкувати 
#всі методи та властивості від 
#свого батьківського класу.
class Person:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        
class Student(Person):
    def __init__(self, name, surname, averageMark):
        super().__init__(name, surname)
        self.averageMark = averageMark
        
person1 = Person("John", "Smith")
student1 = Student("Jenny", "Jackson", 3.5)
print(person1.name, person1.surname)
print(student1.name,student1.surname, student1.averageMark)

Множинне наслідування

Множинне наслідування в Python — це можливість створення дочірнього класу, який наслідує від кількох батьківських класів одночасно. Це дозволяє об’єднувати властивості та методи декількох класів, що може бути корисним у складних системах, де потрібно інтегрувати функціональність з різних джерел. Приклад з відео:

#Python підтримує множинне наслідування
class PythonDeveloper:
    def projectPython(self):
        print("Python coding in process.")
        
class JavaDeveloper:
    def projectJava(self):
        print("Java coding in process.")
        
class PythonJavaDeveloper(PythonDeveloper, JavaDeveloper):
    pass

developer1 = PythonJavaDeveloper()
developer1.projectPython()
developer1.projectJava()

Функція isinstance()

Функція isinstance() в Python використовується для перевірки, чи є об’єкт певного типу або чи належить він до певного класу (або підкласу). Вона повертає True, якщо об’єкт є екземпляром вказаного класу або його підкласу, і False в іншому випадку. Приклад з відео:

#Функція isinstance допомагає 
#перевірити тип об'єкта
class PythonDeveloper:
    def projectPython(self):
        print("Python coding in process.")
        
class JavaDeveloper:
    def projectJava(self):
        print("Java coding in process.")
        
developer1 = JavaDeveloper()

if isinstance(developer1,PythonDeveloper):
    print("This is PythonDeveloper object.")
    
elif isinstance(developer1, JavaDeveloper):
    print("This is JavaDeveloper object.")
    
else:
    print("Unknown object type.")
Уроки 25. Уроки наслідування

В цьому відео поговоримо про наслідування (важлива концепція ООП).

Приклади на Github

Урок 24. Інкапсуляція

Атрибути класів за помовчанням доступні або публічні (public), що надає можливість їх змінювати. Приклад з відео:

#Атрибути класу доступні за замовчуванням, 
#що означає, що ви можете їх змінити.
class Person:
    def __init__(self, name, surname, age):
        self.name = name
        self.surname = surname
        self.age = age
        
    def displayFunc(self):
        print(f"Name: {self.name} Surname:{self.surname} Age:{self.age}")
        
person1 = Person("John", "Smith", 35)
person1.displayFunc()
person1.age = -200
person1.surname = "InvalidSurname"
person1.name = "InvalidName"
person1.displayFunc()
print(person1.surname)

Інкапсуляція у Python — це принцип об’єктно-орієнтованого програмування, що полягає в приховуванні даних об’єкта та наданні доступу до них лише через визначені методи. Це дозволяє контролювати, як дані використовуються, забезпечуючи безпеку і запобігаючи випадковим змінам. У Python для цього використовують односторонній доступ до атрибутів, позначаючи їх як приватні, за допомогою одного або двох підкреслень.

Варіанти модифікаторів доступу:

  • self.name = name – public, доступні звідусіль
  • self._name = name – protected, доступні в межах класу та підкласів
  • self.__name = name – private, доступні в межах класу

Для того щоб зробити змінну приватною треба додати два підкреслення на початку назви змінної. Приклад з відео:

#Ми можемо захистити змінні в класі, 
#позначивши їх приватними.
#Щоб визначити приватну змінну, 
#додайте два підкреслення як префікс
#на початку назви змінної.
#self.__age
class Person:
    def __init__(self, name, surname, age):
        self.__name = name
        self.__surname = surname
        self.__age = age
        
    def displayFunc(self):
        print(f"Name:{self.__name} Surname:{self.__surname} Age:{self.__age}")
        
person1 = Person("John", "Smith", 35)
person1.displayFunc()
#print(person1.__age)
#print(person1.__surname)
#print(person1.__name)

Приклад з відео із застосуванням методу displayFunc() для виведення атрибутів об’єкта класу Person і спробою внесення змін у приватні атрибути:

class Person:
    def __init__(self, name, surname, age):
        self.__name = name
        self.__surname = surname
        self.__age = age
        
    def displayFunc(self):
        print(f"Name:{self.__name} Surname:{self.__surname} Age:{self.__age}")
        
person1 = Person("John", "Smith", 35)
person1.displayFunc()
person1.__name = "James"
person1.__surname = "Johns"
person1.__age = 25
print("--------------")
person1.displayFunc()
print(person1.__age)
print(person1.__surname)
print(person1.__name)
person2 = Person("Jenny", "Jackson", 30)
person2.displayFunc()
print(person2.__age)

Геттери та сеттери

Для внесення змін у приватні атрибути можна використовувати спеціальні методи: setter method (сеттери) – для внесення змін у визначені атрибути класу, getter method (геттери) – для отримання поточних даних з атрибутів класу. Прикладі з відео:

class Person:
    def __init__(self, surname, age):
        self.__surname = surname
        self.__age = age
        
    #setter method
    def setAge(self, age):
        if 1<age<120:
            self.__age=age
            
        else:
            print("Invalid age input.")
    #getter method            
    def getAge(self):
        return self.__age

person1 = Person("Smith", 35)
print(person1.getAge())
person1.setAge(33)
print(person1.getAge())
person1.setAge(0)
print(person1.getAge())
print(person1.__surname)

Замість методів геттерів та сеттерів можна використовувати так звані властивості геттерів та сеттерів. Особливість синтаксису полягає у використанні символу @ для позначення відповідних властивостей. Приклад з відео:

#Щоб створити властивість геттера, 
#використовуйте анотацію @property.
#Щоб створити властивість сеттера, 
#використовуйте анотацію @name.setter.
class Person:
    def __init__(self, surname, age):
        self.__surname = surname
        self.__age = age
        
    @property
    def age(self):
        return self.__age
    
    @age.setter
    def age(self, age):
        if 1<age<120:
            self.__age=age    
        else:
            print("Invalid age input.")
            
person1 = Person("Smith", 35)
print(person1.age)
person1.age = 33
print(person1.age)
person1.age = 150
print(person1.age)
Урок 24. Інкапсуляція

В цьому відео поговоримо про інкапсуляцію (важлива концепція ООП).

Приклади на Github

Урок 23. Класи і об’єкти

Класи в Python — це шаблони для створення об’єктів, які дозволяють організувати дані і функціональність у програмі. Вони є основою об’єктно-орієнтованого програмування (ООП) і дозволяють створювати об’єкти, які мають власні атрибути (дані) і методи (функції). Приклад з відео:

#Python — це об'єктно-орієнтована 
#мова програмування.
#Майже все в Python є об’єктом 
#зі своїми властивостями та методами.
#Клас схожий на конструктор об’єктів 
#або «схему» для створення об’єктів.
#Щоб створити клас, використовуйте 
#ключове слово class
class MyFavouriteNumber:
    favouriteNumber = 5
    
#Now we can use the class named MyFavouriteNumber to create objects
favNum1 = MyFavouriteNumber()
print(favNum1)
print(type(favNum1))
print(favNum1.favouriteNumber)

Функція __init__()

Функція __init__() в Python — це спеціальний метод, який використовується як конструктор класу. Він викликається автоматично при створенні нового об’єкта цього класу і використовується для ініціалізації атрибутів об’єкта. Приклад з відео:

#Щоб зрозуміти значення класів, 
#ми повинні зрозуміти
#вбудовану функцію __init__().
#Усі класи мають функцію під 
#назвою __init__(), яка завжди
#виконується, коли клас ініціюється.
#Функція __init__() щоразу 
#викликається автоматично
#клас використовується для 
#створення нового об'єкта.
class MyFavouriteNumber:
    def __init__(self, favouriteNumber):
        self.favouriteNumber=favouriteNumber
        
favNum1 = MyFavouriteNumber(7)

print(favNum1.favouriteNumber)

favNum2 = MyFavouriteNumber(8)

print(favNum2.favouriteNumber)

Функція __str__()

Функція __str__() в Python — це спеціальний метод, який визначає, як об’єкт класу буде представлений у вигляді рядка. Він викликається, коли ви використовуєте функцію print() або функцію str() для об’єкта. Приклад з відео:

#Функція __str__() керує тим, 
#що має бути повернуто
#коли об'єкт класу представлено 
#у вигляді рядка.
#Якщо функцію __str__() не встановлено, 
#повертається рядкове представлення об'єкта 

class Person:
    def __init__(self, name, surname, age):
        self.name = name
        self.surname = surname
        self.age = age
        
person1 = Person("John", "Smith", 35)
print(person1)
print(person1.name, person1.surname, person1.age)
person2 = Person("Jenny", "Jackson", 30)
print(person2)
print(person2.name, person2.surname, person2.age)

Приклад рядкового представлення об’єкта за допомогою функції __str__() з відео:

#Рядкове представлення 
#об’єкта з функцією __str__().
class Person:
    def __init__(self, name, surname, age):
        self.name = name
        self.surname = surname
        self.age = age
        
    def __str__(self):
        return f"Name: {self.name} Surname: {self.surname} Age: {self.age}"

        
person1 = Person("John", "Smith", 35)
print(person1)
person2 = Person("Jenny", "Jackson", 30)
print(person2)

Методи об’єкта

Спрощено методи об’єкта в Python — це функції, які визначені всередині класу і можуть бути викликані на об’єктах цього класу. Вони дозволяють виконувати дії або маніпулювати атрибутами об’єкта. Приклад з відео:

#Об'єкти також можуть містити методи. 
#Методи в об'єктах є функціями
#які належать об'єкту.
#Параметр self - це посилання на 
#поточний екземпляр класу,
#та використовується для доступу до 
#змінних, які належать до класу.
class Person:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        
    def introduceFunc(self):
        print("Hello my name is {} {}".format(self.name, self.surname))
        
person1 = Person("John", "Smith")
person1.introduceFunc()
person2 = Person("Jenny", "Jackson")
person2.introduceFunc()

Параметр self

Параметр self в Python — це посилання на поточний об’єкт класу, з яким працює метод. Він використовується для доступу до атрибутів і методів цього об’єкта. Приклад з відео:

#Параметр self - це посилання на 
#поточний екземпляр класу,
#та використовується для доступу до 
#змінних, які належать до класу.
#Його не обов'язково називати self, 
#ви можете називати його як завгодно,
#але це має бути перший параметр 
#будь-якої функції в класі.
class Person:
    def __init__(refToCurrentInstance, name, surname):
        refToCurrentInstance.name = name
        refToCurrentInstance.surname = surname
        
    def introduceFunc(refToCurrentInstance):
        print("Hello my name is {} {}".format(refToCurrentInstance.name,
                                              refToCurrentInstance.surname))
        
person1  = Person("John", "Smith")
person1.introduceFunc()
person2 = Person("Jenny", "Jackson")
person2.introduceFunc()

Внесення змін в об’єкти класу

Змінювати об’єктіи класу можна за допомогою так званого dot syntax (синтаксису крапки). Dot syntax (синтаксис крапки) в Python — це спосіб доступу до атрибутів і методів об’єктів або класів за допомогою крапки. Це дозволяє вам працювати з властивостями та функціями, які належать до конкретного об’єкта або класу. Приклад з відео:

#Ви можете змінювати властивості об’єктів, 
#використовуючи крапковий синтаксис для доступу
class Person:
    def __init__(self, name, surname, age):
        self.name =  name
        self.surname =  surname
        self.age = age
        
    def introduceFunc(self):
        print("Hello my name is {} {}".format(self.name, self.surname))
        print("I'm {} old".format(self.age))
        

person1 = Person("John", "Smith", 35)
person1.introduceFunc()
person1.name = "James"
person1.age = 33
person1.introduceFunc()
del person1.age
#person1.introduceFunc()
del person1
#print(person1)
Урок 23. Класи та об’єкти

В цьому відео поговоримо про:
00:06 Classes
03:43 init() Function
09:39 str() Function
18:30 Object Methods
22:35 self Parameter
27:14 Modify Objects

Приклади на Github

Урок 22. Файли

Python підтримує різноманітні типи файлів. Файли можна розділити на дві великі групи:

  • Текстові файли – файли, які зберігають інформацію у текстовому форматі, напр. txt, html, csv тощо.
  • Двійкові файли – зображення, аудіо, відео тощо.

Робота з файлами може відрізнятися в залежності від типу файлу.

Послідовність роботи з файлами:

  1. Використовуйте метод open(), щоб відкрити файл
  2. Використовуйте метод read() для читання файлу або метод write() для запису у файл.
  3. Використовуйте метод close(), щоб закрити файл.

Для початку роботи з файлом скористайтеся методом open(), щоб відкрити його: open(file, mode). Перший параметр – це шлях до файлу. Він може бути абсолютним або відносним.

Приклад абсолютного шляху до файлу – C://directoryname/filename.txtC://directoryname/filename.txt

Відносний шлях до файлу залежить від місця поточного скрипта Python. Приклад відносного шляху: directoryname/filename.txtdirectoryname/filename.txt

Другим аргументом є режим. Є чотири режими:

  • r (Read/Читання). Відкриває файл для читання. Якщо файл не знайдено, генерується FileNotFoundError.
  • w (Write/Написати). Відкриває файл для запису в нього. Якщо файл відсутній, він створений. Якщо файл присутній, він створюється знову, а всі дані в ньому стираються.
  • a(Append/Додати). Відкриває файл для внесення змін без стирання попередніх даних. Якщо файл відсутній, він створюється. Якщо файл присутній, нова інформація додається в кінці файлу.
  • x (Create/Створити). Створює файл, якщо файл існує, повертає помилку.

Крім того, ви можете вказати, чи потрібно обробляти файл у двійковому чи текстовому режимі:

  • t – text – значення за замовчуванням. Текстовий режим
  • b – binary – Двійковий режим (наприклад, зображення)

Функція open() в Python використовується для відкриття файлів. Вона повертає об’єкт файлу, з яким можна працювати. Приклад з відео:

#відкрити файл у режимі «запису».
file1 = open("file.txt", "w")
#закрити файл
file1.close()

Під час роботи з файлами можуть виникати помилки, для обробки яких можна використовувати блоки try except. Приклад з відео:

#Під час роботи з файлами можливі винятки.
#Ви можете використовувати блоки 
#"try...except" для вирішення таких проблем.
try:
    file2 = open("file2.txt", "w")
    try:
        file2.write("Python is a solid choice.")
    except Exception as exInner:
        print(exInner)
    finally:
        file2.close()
except Exception as exOuter:
    print(exOuter)

Вираз with в Python

Вираз with в Python використовується для управління контекстом, що дозволяє автоматично обробляти ресурси, такі як файли або з’єднання. Він забезпечує безпечне відкриття і закриття ресурсів, навіть якщо виникає помилка.

Основні переваги використання with:

  • Автоматичне закриття ресурсів: Наприклад, при відкритті файлу, with автоматично закриває його після виходу з блоку, навіть якщо сталася помилка.
  • Читабельність: Код стає більш зрозумілим і компактним.

Приклад з відео:

#Можна використовувати вираз "with". 
#Він закриває файли в будь-якому разі.
# with open(filename, mode) as file_obj:
#    commands
#with вираз визначає змінну file_obj для відкритого файлу.
with open("file3.txt", "w") as fileInUse:
    fileInUse.write("Python is a solid choice. File3.")

Метод write()

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

#створити новий файл і вписати в нього текст.
with open("file4.txt", "w") as fileInUse:
    fileInUse.write("Java is a solid choice. File4")
    
with open("file4.txt", "w") as fileInUse:
    fileInUse.write("Python is a solid choice. File4.")
    
with open("file4.txt", "a") as fileInUse:
    fileInUse.write("\nJava is a solid choice. File4")
    
with open("file4.txt", "a") as fileInUse:
    print("\nC# is a solid choice. File4", file=fileInUse)

Зчитування файлу

Зчитування файлу в Python зазвичай здійснюється за допомогою методу open() у поєднанні з методами для читання вмісту. Основні способи зчитування:

  • read() – Зчитує весь вміст файлу як один рядок.
  • readline() – Зчитує один рядок за раз.
  • readlines() – Зчитує всі рядки та повертає їх у вигляді списку.

Приклад з відео:

#ви можете прочитати текстовий файл за допомогою cycle for
with open("file4.txt", "r") as fileInUse:
    for line in fileInUse:
        print(line, end="")#readline is used behind the scene

#Явне використання readline
print("\nExplicit use of readline\n")        
with open("file4.txt", "r") as fileInUse:
    str1=fileInUse.readline()
    print(str1, end="")
    str2=fileInUse.readline()
    print(str2, end="")
    str3=fileInUse.readline()
    print(str3, end="")

Приклад з відео із поєднанням readline() з циклом while та застосуванням методу read():

#readline() у поєднанні з циклом while
with open("file4.txt", "r") as fileInUse:
    fileLine = fileInUse.readline()
    while fileLine:
        print(fileLine, end="")
        fileLine = fileInUse.readline()
print()
#для невеликих файлів можна 
#використовувати метод read().
with open("file4.txt", "r") as fileInUse:
    fileContent = fileInUse.read()
    print(fileContent)

Приклад із застосуванням readlines() та додаванням encoding параметра з відео:

#Метод readlines() можна використовувати 
#для читання всіх рядків файлу
#вони будуть збережені як список
with open("file4.txt", "r") as fileInUse:
    fileContent = fileInUse.readlines()
    print(fileContent)
    
#якщо є проблеми з кодуванням, 
#можна скористатися параметром кодування
with open("file4.txt", encoding="utf8") as fileInUse:
    fileContent = fileInUse.read()
    print(fileContent)

Файли csv

Робота з CSV-файлами в Python зазвичай здійснюється за допомогою стандартної бібліотеки csv, яка забезпечує прості інструменти для читання та запису CSV-даних. Приклад з відео:

#У Python є модуль csv. 
#Цей модуль спрощує роботу з файлами csv.
import csv

fileName = "file8.csv"

customers = [
    ["Solverson", 35],
    ["Jackson", 29]
    ]
with open(fileName, "w", newline="") as fileInUse:
    writer = csv.writer(fileInUse)
    writer.writerows(customers)
    
with open(fileName, "a", newline="") as fileInUse:
    customer = ["Smith", 25]
    writer = csv.writer(fileInUse)
    writer.writerow(customer)
    
with open(fileName, "r", newline="") as fileInUse:
    reader=csv.reader(fileInUse)
    for i in reader:
        print("Name: {}, Age: {}".format(i[0], i[1]))

Модуль OS

В Python є вбудований модуль os.

Цей модуль містить низку корисних функцій:

  • mkdir() – створює нову папку
  • rmdir() – видаляє папку
  • rename() – перейменовує файл
  • remove() – видаляє файл

Модуль os в Python — це стандартна бібліотека, яка надає функції для взаємодії з операційною системою. Він дозволяє виконувати різні операції, такі як робота з файлами і каталогами, отримання інформації про систему, а також управління середовищем. Приклад з відео:

import os

#використання методу mkdir
try:
    os.mkdir("dir1")
    with open("dir1/file.txt","w") as fileInUse:
        fileInUse.write("Python is a solid choice")
    with open("dir1/file.txt", "r") as fileInUse:
        content = fileInUse.read()
        print(content)
        
except Exception as e:
    print(e)

Приклад з перейменуванням файлу з відео:

import os

os.rename("dir1/file.txt", "dir1/fileRenamed.txt")
with open("dir1/fileRenamed.txt", "r") as fileInUse:
    content = fileInUse.read()
    print(content)

Приклад з видаленням файлу та папки з відео:

import os

#delete folder dir1
os.remove("dir1/fileRenamed.txt")
os.rmdir("dir1")
Урок 22. Файли

В цьому відео поговоримо про:
00:07 Files
12:22 write() – “w” and “a”
15:54 Reading file
27:23 csv files
34:46 OS Module

Приклади на Github

Урок 21. Регулярні вирази

Функція findall()

У Python функція findall() належить до модуля re, який використовується для роботи з регулярними виразами. Ця функція шукає всі неперервні входження шаблону в рядку і повертає їх у вигляді списку. Приклад з відео:

#"RegEx", або регулярний вираз, це 
#послідовність символів, яка утворює
#шаблон пошуку.
#RegEx можна використовувати, щоб перевірити, 
#чи містить рядок вказаний шаблон пошуку.
#Python має вбудований пакет під назвою re, 
#з яким можна працювати
#Імпортуйте модуль re.
#Функція findall() повертає список із усіма збігами.
import re

str1 = "It was raining outside."
mathcList = re.findall("rain", str1)
print(str1)
print(mathcList)

Приклад з findall(), якщо не було збігів:

#Якщо збігів не знайдено, 
#повертається порожній список
import re

str1 = "It was raining outside."
matchList = re.findall("snowing",str1)
print(str1)
print(matchList)
СимволОписПриклад
[]Набір символів“[a-m]”
\Сигналізує спеціальну послідовність (також може використовуватися для екранування спеціальних символів)“\d”
.Будь-який символ (крім символу нового рядка)“ra..g”
^Починається з“^It”
$Закінчується на“side.$”
*Нуль або більше випадків“ra.*g”
+Один або кілька випадків“ra.+g”
?Нуль або один раз“ra.?g”
{}Точно вказана кількість повторень“ra.{4}g”
|Або або“raining|snowing”
Метасимволи

Приклад із метсимволами з відео:

import re

str1 = "15th December. It was raining outside."
#Знайти всі символи нижнього регістру в 
#алфавітному порядку між «a» і «y»:
searchResult = re.findall("[a-y]", str1)
print("All lower case characters")
print(searchResult)
#Знайти всі цифрові символи:
searchResult2 = re.findall("\d", str1)
print(searchResult2)
#Пошук послідовності, яка починається з "ra", а потім чотири (будь-які)
#символи та "g":
searchResult3 = re.findall("ra....g", str1)
print(searchResult3)

Ще приклад із застосуванням метсимволів з відео:

import re

str1 = "It was raining outside."
#Перевірте, чи рядок починається з "It":
searchResult = re.findall("^It", str1)
print(searchResult)
#Перевірте, чи закінчується рядок на 'side.':
searchResult2 = re.findall("side.$", str1)
print(searchResult2)
#Пошук послідовності, яка починається з "ra", після чого йде 0 
#або більше символів і "g":
searchResult3 = re.findall("ra.*g", str1)
print(searchResult3)

Ще один приклад з метасимволами з відео:

import re
str1 = "It was raining outside."
#Пошук послідовності, яка починається 
#з "ra", за якою йде 1 або більше
# (будь-яких) символів та "g"
searchResult = re.findall("ra.+g", str1)
print(searchResult)
#Пошук послідовності, яка починається 
#з "ra", після чого йде 0 або 1
#символ і "g":
searchResult2 = re.findall("ra.?g", str1)
print(searchResult2)
#Пошук послідовності, яка починається 
#з "ra", з точним дотриманням
#4 символи та "g"
searchResult3 = re.findall("ra.{4}g",str1)
print(searchResult3)
#Перевірте, чи рядок містить текст "raining" чи "snowing"
searchResult4 = re.findall("raining|snowing",str1)
print(searchResult4)

Також findall() можна застосовувати зі спеціальними послідовностями.

СимволОписПриклад
\AПовертає збіг, якщо вказані символи знаходяться на початку рядка“\AThe”
\bПовертає збіг, якщо вказані символи знаходяться на початку або в кінці слова (“r” на початку впевнюється, що рядок розглядається як “необроблений рядок”)r”\bain”
r”ain\b”
\BПовертає збіг, якщо вказані символи присутні, але НЕ на початку (чи в кінці) слова (“r” на початку гарантує, що рядок розглядається як “необроблений рядок”)r”\Bain”
r”ain\B”
\dПовертає збіг, якщо рядок містить цифри (числа від 0 до 9)“\d”
\DПовертає збіг, якщо рядок НЕ містить цифр“\D”
\sПовертає збіг, якщо рядок містить пробіл“\s”
\SПовертає збіг, якщо рядок НЕ містить пробілу“\S”
\wПовертає збіг, якщо рядок містить будь-які символи слова (символи від a до Z, цифри від 0 до 9 і символ підкреслення _)“\w”
\WПовертає збіг, якщо рядок НЕ містить символів слів“\W”
\ZПовертає збіг, якщо вказані символи знаходяться в кінці рядка“Spain\Z”
Спеціальні послідовності

Приклад зі спеціальними символами з відео:

import re
str1 = "25th December. It was raining outside."
#Перевірте, чи починається рядок з "It"
searchResult = re.findall("\AIt", str1)
print(searchResult)
#Перевірте, чи є слово «rain» на початку слова
searchResult2 = re.findall(r"\brain", str1)
print(searchResult2)
#Перевірте, чи є "ing" у кінці слова
searchResult3 = re.findall(r"ing\b", str1)
print(searchResult3)
#Перевірте, чи присутній "ini", але НЕ на початку слова
searchResult4 = re.findall(r"\Bini", str1)
print(searchResult4)
#Перевірте, чи містить рядок якісь цифри (від 0 до 9)
searchResult5 = re.findall("\d", str1)
print(searchResult5)

Ще один приклад з відео зі спецсимволами:

import re
str1 = "25th December. It was raining outside."
#Повертати збіг для кожного символу без цифр
print("Return a match at every no-digit character")
searchResult = re.findall("\D", str1)
print(searchResult)
#Повертати збіг для кожного пробілу
print("Return a match at every white-space character")
searchResult2 = re.findall("\s", str1)
print(searchResult2)
#Повертати збіг для кожного НЕ пробілу
print("Return a match at every NON white-space character")
searchResult3 = re.findall("\S", str1)
print(searchResult3)
#Повертати збіг для кожного символу слова 
#(символи від a до Z, цифри від 0 до 9 і символ підкреслення _)"
print("Return a match at every word character (characters from a to Z, digits from 0-9, and the underscore _ character)")
searchResult4 = re.findall("\w", str1)
print(searchResult4)
#Повертати збіг для кожного НЕ символу слова 
#(символи НЕ між a і Z. Наприклад \"!\", \"?\" пробіл тощо)
print("Return a match at every NON word character (characters NOT between a and Z. Like \"!\", \"?\" white-space etc.)")
searchResult5 = re.findall("\W", str1)
print(searchResult5)
#Перевірте, чи закінчується рядок на \"outside.\
print("Check if the string ends with \"outside.\"")
searchResult6 = re.findall("outside.\Z", str1)
print(searchResult6)

З findall() також часто використовуються sets або набори символів.

SetОпис
[arn]Повертає збіг, де присутній один із указаних символів (a, r або n).
[a-n]Повертає збіг для будь-якого символу нижнього регістру в алфавітному порядку від a до n
[^arn]Повертає збіг для будь-якого символу, КРІМ a, r і n
[0123]Повертає збіг, якщо присутня будь-яка з указаних цифр (0, 1, 2 або 3).
[0-9]Повертає збіг для будь-якої цифри від 0 до 9
[0-5][0-9]Повертає збіг для будь-яких двозначних чисел від 00 до 59
[a-zA-Z]Повертає збіг для будь-якого символу в алфавітному порядку від a до z, нижнього АБО верхнього регістру
[+]У наборах +, *, ., |, (), $,{} не мають спеціального значення, тому [+] означає: повертає збіг для будь-якого символу + у рядку
Набори символів

Приклад з наборами символів з відео:

import re
str1 = "25th December. It was raining outside."
#Перевірте, чи містить рядок символи j, i або w
searchResult = re.findall("[jiw]", str1)
print(searchResult)
#Перевірте, чи містить рядок символи між j і w
searchResult2 = re.findall("[j-w]", str1)
print(searchResult2)
#Перевірте, чи містить рядок інші символи, крім j, i чи w
searchResult3 = re.findall("[^jiw]", str1)
print(searchResult3)
#Перевірте, чи містить рядок 1, 2, 3, 4 або 5 цифр
searchResult4 = re.findall("[12345]", str1)
print(searchResult4)

Ще один приклад з відео з наборами символів:

import re
str1 = "25th December. It was raining outside.+"
#Перевірте, чи містить рядок цифри від 0 до 9
searchResult = re.findall("[0-9]", str1)
print(searchResult)
#Перевірте, чи містить рядок двозначні числа від 00 до 99
searchResult2 = re.findall("[0-9][0-9]", str1)
print(searchResult2)
#Перевірте, чи містить рядок символи 
#від a до w нижнього регістру,
#і від A до Y у верхньому регістрі
searchResult3 = re.findall("[a-wA-Y]", str1)
print(searchResult3)
#Перевірте, чи містить рядок символи +
searchResult4 = re.findall("[+]", str1)
print(searchResult4)

Функція search()

Функція search() у Python також належить до модуля re, який використовується для роботи з регулярними виразами. Ця функція шукає перше входження шаблону в рядку і повертає об’єкт-результат, якщо знайдено, або None, якщо входження не виявлено. Приклад з відео:

#Функція search() шукає збіг у рядку та повертає
#Match об'єкт, якщо є збіг.
#Якщо є більше одного збігу, лише перший збіг
#повернеться.
import re

str1 = "It was raining outside."
match1 = re.search("\s", str1)
print(match1)
print("Position of space: ", match1.start())

Ще один приклад із застосуванням функції search() з відео:

#Якщо збігів не знайдено, 
#повертається значення None
import re

str1 = "It was raining outside."
match1 = re.search("snowing", str1)
print(match1)

Функція split()

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

#Функція split() повертає список, 
#де було розділено рядок
#по кожному збігу.
import re

str1 = "It was raining outside."
splitedList = re.split("\s", str1)
print(str1)
print(splitedList)
print(str1)

Ще один приклад із застосуванням функції split():

#Ви можете контролювати кількість 
#повторень, вказавши
#параметр maxsplit
import re

str1 = "It was raining outside."
splitedList = re.split("\s", str1, 1)
print(str1)
print(splitedList)

Функція sub()

Функція sub() у Python належить до модуля re і використовується для заміни частин рядка, які відповідають заданому регулярному виразу, на інший рядок. Приклад з відео:

#Функція sub() замінює збіги 
#текстом за вашим вибором
import re

str1 = "It was raining outside."
substitutedStr1 = re.sub("\s", "-", str1)

print(str1)
print(substitutedStr1)

Ще один приклад із sub() з відео:

#Ви можете контролювати кількість замін, 
#вказавши параметр count
import re

str1 = "It was raining outside."
substitutedStr1 = re.sub("\s", "-", str1, 1)

print(str1)
print(substitutedStr1)

Match object

Match object (об’єкт відповідності) у Python є результатом виконання функцій модуля re, таких, наприклад, як search() та findall(). Цей об’єкт надає інформацію про знайдене входження регулярного виразу в рядок. Він містить різні методи та атрибути, які дозволяють отримати деталі про знайдене входження.  Приклад з відео:

#Об’єкт відповідності – це об’єкт, 
#що містить інформацію про пошук
#і результат.
#Якщо збігу немає, замість нього 
#буде повернено значення None
import re

str1 = "It was raining outside."
searchResult = re.search("rain", str1)
print(searchResult)

Приклад  з  Match object та span():

#.span() повертає кортеж, 
#що містить початкову та кінцеву позиції
#збігу.
#Регулярний вираз шукає будь-які слова, 
#які починаються з малої літери "r"
import re

str1 = "It was raining outside."
searchResult = re.search(r"\br\w+", str1)
print(searchResult)
print(searchResult.span())

Приклад  з  Match object та group():

#.group() повертає частину 
#рядка, де був збіг
#Регулярний вираз шукає будь-які 
#слова, які починаються з малої літери "r"
import re

str1 = "It was raining outside."
searchResult = re.search(r"\br\w+", str1)
print(searchResult)
print(searchResult.group())

Приклад  з  Match object та string:

#.string повертає рядок, переданий у функцію
#Регулярний вираз шукає будь-які слова, 
#які починаються з малої літери "r"
import re

str1 = "It was raining outside."
searchResult = re.search(r"\br\w+", str1)
print(searchResult)
print(searchResult.string)
Урок 21. Регулярні вирази

В цьому відео поговоримо про:
00:00:08 findall() Function
00:05:20 Metacharacters – метасимволи
00:20:07 Special Sequences – Спеціальні послідовності
00:43:41 Sets – набори у регулярних виразах
00:57:07 search() Function
01:01:44 split()
01:06:40 sub()
01:09:46 Match object

Приклади на Github