Programming Concepts Course
  • Економіка & Великі дані
  • Математика
  • Бізнес Економіка
  1. Базова робота з файлами. Обробка помилок
  2. Practice Session 12
  • 👋🏻 Вітаємо на курсі!
  • Змінні, типи даних. Математичні операції в Python
    • Practice Session 2
  • Списки
    • Practice Session 6
  • Функції
    • Practice Session 8
  • Основи Git
    • Practice Session 9
  • Словники. List Comprehension
    • Practice Session 10
  • Базова робота з файлами. Обробка помилок
    • Practice Session 12
  • Обробка даних з JSON та CSV
    • Practice Session 13
  • Вступ до ООП
    • Practice Session 14
  • Базова робота з бібліотеками
    • Practice Session 15
    • Practice Session 16

Зміст

  • 🗃️ Базова робота з файлами. Обробка помилок
  • 📌 План заняття:
  • 📖 Читання файлів за допомогою Python
    • 👨‍💻 Live coding 1: Вглиб файлової системи
  • ✍🏻 Запис у файли
    • 👨‍💻 Live Coding 2: Залишити свій слід у файлі
  • 🤾🏻 Обробка помилок
    • 👨‍💻 Live Coding 3: Помилка? Лови!
  1. Базова робота з файлами. Обробка помилок
  2. Practice Session 12

Practice Session 12

🗃️ Базова робота з файлами. Обробка помилок

Сьогодні ми з вами наблизилися до того моменту, коли нам стало необхідно працювати з реальними файлами в наших комп’ютерах. Робота з файлами корисна тим, що вона дозволяє нам безпечно працювати з даними: читати, зберігати та аналізувати їх; та навіть більш за те - це дозволяє автоматизувати деякі процеси, про що ми сьогодні й поговоримо.

ПриміткаЗауважте!

Для успішного виконання цієї практичної, вам знадобиться зробити Fork репозиторію, а потім клонувати його на свій пристрій. Для того, аби здати практичну, вам потрібно буде надіслати pull request

📌 План заняття:

  • 📖 Читання файлів за допомогою Python
    • 👨‍💻 Live Coding: Вглиб файлової системи
    • 🛠 Guided Practice: Аналіз логів сервера
  • ✍🏻 Запис у файли
    • 👨‍💻 Live Coding: Залишити свій слід у файлі
    • 🛠 Guided Practice: Збереження даних
  • 🤾🏻 Обробка помилок
    • 👨‍💻 Live Coding 3: Помилка? Лови!
    • 🛠 Guided Practice: Збереження даних

📖 Читання файлів за допомогою Python

У Python для роботи з файлами використовується вбудована функція open().

Головне правило: відкрив файл — закрий його. Якщо файл не закрити, він може заблокуватися системою або пошкодитися. Щоб не писати file.close() вручну і не забувати про це, ми використовуємо конструкцію with. Вона створює “безпечний контекст”: щойно код вийде з блоку with, файл закриється автоматично.

Базовий синтаксис:

with open("filename.txt", "r", encoding="utf-8") as file:
    # тут ми працюємо з файлом

Розбір параметрів:

  • "filename.txt" — шлях до файлу (назва).

  • r (read) — режим роботи. Кажемо Python: “відкрий тільки для читання, нічого не змінюй”.

  • encoding="utf-8" — кодування. Обов’язковий параметр, щоб кирилиця чи спецсимволи відображалися коректно.

  • as file — даємо змінній ім’я, через яке будемо звертатися до файлу всередині блоку.

Як читати дані:

  • file.read() — зчитує весь файл одразу як один великий рядок тексту. Ок для маленьких файлів, але може “покласти” програму на великих логах.

  • for line in file: — найкращий спосіб. Читає файл по одному рядку за раз, не перевантажуючи оперативну пам’ять комп’ютера.

👨‍💻 Live coding 1: Вглиб файлової системи

Контекст: Ми працювали зі своїм комп’ютером, аж от халепа - він почав дивно працювати та виснути. Ми не знаємо в чому проблема, проте знаємо, що він залишає дані про всі дії операційної системи у певному файлі. В цьому файлі міститься різна інформація: від інформації про різні процеси і до критичних помилок. Наша задача - відкрити цей файл та вивести рядки, які містять критичні помилки та показати їх користувачу

Вхідні дані: Файл log.txt з логами комп’ютера

log.txt
INFO: System boot sequence initiated
INFO: Loading kernel modules
WARNING: Deprecated configuration format in /etc/network
INFO: Network interface eth0 up
INFO: Starting SSH daemon
ERROR: Failed to bind to port 22 - address already in use
...

Очікуваний результат: Вивід всіх рядків з помилками та кількість цих помилок

🛠 Guided Practice: Аналіз логів сервера

Контекст: Уявіть, що ви розробляєте систему для власного серверу. Сервер працює стабільно, але система моніторингу зафіксувала аномальну активність. Якийсь горе-хакер сподівається знайти на вашому сервері підозрілі дані, на що сервер реагує помилкою 404 Not Found.

Проте, сьогодні точно не його щасливий день, оскільки ви проаналізуєте лог HTTP-запитів і витягнете з нього всі рядки з 404 Not Found. Це дозволить нам побачити, які саме чутливі файли шукав зловмисник, і оцінити масштаб сканування, щоб передати ці дані команді кібербезпеки для блокування хакерів.

Вхідні дані: Файл server_logs.txt, який містить всі логи серверу.

server-logs.txt
[10:05:21] GET /index.html -> 200 OK
[10:05:23] GET /style.css -> 200 OK
[10:05:30] GET /admin_dashboard.php -> 404 Not Found
[10:06:01] POST /api/login -> 200 OK

Очікуваний результат: 5 рядків, які містять помилку 404 Not Found

ПорадаПідказка

Використаєте конструкцію with open() для безпечного читання з файлу, а потім проітеруйтеся по файлу та знайдіть всі потрібні рядки

✍🏻 Запис у файли

Збереження даних працює за тим самим принципом with open(…), але змінюється режим роботи.

Основні режими запису:

w (write) — Обережно! Цей режим створює новий файл, а якщо файл вже існує — повністю стирає його вміст перед записом. Використовуємо, коли треба створити звіт з нуля.

a (append) — Дописує нову інформацію в кінець існуючого файлу. Старі дані залишаються цілими. Ідеально для ведення логів або збереження історії дій.

Синтаксис запису:

with open("report.txt", "w", encoding="utf-8") as file:
    file.write("Мій перший записаний рядок!\n")

👨‍💻 Live Coding 2: Залишити свій слід у файлі

Контекст: Тепер, коли ми вже вміємо читати з файлу ми можемо побачити потрібну нам інформацію в доволі легкий спосіб. А проте, як тільки ми закриємо консоль, карета перетвориться на гарбуз, і всі наші тяжко здобуті дані зникнуть. Для того, аби ми могли зберегти дані для подальшої обробки ми можемо записати їх в окремий файл errors.txt

Вхідні дані: Рядки з помилками системи, здобуті раніше

Очікуваний результат: Новий файл який містить усі знайдені помилки errors.txt

🛠 Guided Practice: Збереження даних

Контекст: Очевидно, що дані, знайдені в логах нашого серверу теж потребують запису. Сформуйте новий файл suspicious_requests.txt, який потім можна буде передати команді з кібербезпеки

Вхідні дані: Рядки з підозрілими запитами, здобуті раніше

Очікуваний результат: Новий файл який містить усі підозрілі запити suspicious_requests.txt

🤾🏻 Обробка помилок

Програмісти роблять помилки, а користувачі роблять їх ще частіше. Якщо Python стикається з критичною проблемою, він викидає “виняток” (Exception) — програма аварійно завершує роботу і видає страшний червоний текст у консолі.

Щоб програма була надійною, ми вчимо її “ловити” помилки за допомогою конструкції try-except.

Як це працює:

  • У блок try: ми кладемо код, який потенційно може зламатися.

  • У блок except: ми пишемо, що треба зробити, якщо помилка таки сталася. Програма не падає, а просто виконує цей “запасний план”.

  • Блок finally: (необов’язковий) — виконується ЗАВЖДИ в самому кінці, незалежно від того, була помилка чи ні.

Приклад:

try:
    # Ризикована дія (користувач міг ввести неправильну назву)
    with open("неіснуючий_файл.txt", "r") as f:
        print(f.read())
except FileNotFoundError: 
    # Ловимо конкретну помилку відсутності файлу
    print("Упс! Файл не знайдено. Перевірте правильність назви.")
except Exception as e: 
    # Ловимо будь-яку іншу неочікувану помилку
    print(f"Сталося щось дивне: {e}")

Це дозволяє програмі ввічливо повідомити користувача про проблему і продовжити свою роботу (наприклад, попросити ввести назву ще раз).

👨‍💻 Live Coding 3: Помилка? Лови!

Контекст: Тепер, коли всі файли зібрано в одній директорії, ми хочемо зробити так, аби нашим колегам не довелося шукати їх по всій файловій системі та реалізувати виведення всього файлу за допомогою нашого скрипта. Для цього, нам потрібно реалізувати систему вводу/виводу, коли користувач вводить назву файлу, а наша програма виводить його вміст. При цьому, нам треба корректно обробити всі помилки, що можуть виникнути під час роботи з файлом

Вхідні дані: Назва файлу, введена користувачем

Очікуваний результат: Вміст файлу

🛠 Guided Practice:

Контекст: Ваша програма з попереднього завдання на стільки сподобалась колегам, що тепер вони просять додати ще один корисний інструмент - утиліту для створення резервних копій логів. Користувач має ввести назву існуючого файлу та назву для його копії.

Оскільки люди часто помиляються у назвах, програма має бути захищена від падінь за допомогою try-except, а в кінці завжди звітувати про завершення операції через блок finally.

Вхідні дані: Назва файлу та копії, введені користувачем у форматі log.txt log-copy.txt

Очікуваний результат: Створена копія файлу log.txt з назвою log-copy.txt, яка буде містити ідентичний контент

ПорадаПоради щодо виконання
  • Розбийте ввід користувача на дві змінні за допомогою методу split().
  • Після цього, використайте os.path.join аби обмежитися директорією files/.
  • Для обробки помилок, використайте принаймні FileNotFoundError та except: для загальних помилок.
 

© 2025 Vadym Katsel. All rights reserved.