Модуль 6: Файли та обробка помилок

Робота з файлами

📖 Теорія
Python вміє читати та записувати файли. Для роботи з файлом потрібно його відкрити, попрацювати, закрити.

Режими відкриття:
• 'r' — читання (за замовчуванням)
• 'w' — запис (перезаписує файл)
• 'a' — додавання в кінець
• 'r+' — читання та запис

Рекомендується використовувати with — контекстний менеджер, який автоматично закриває файл:

with open('файл.txt', 'r', encoding='utf-8') as f:
content = f.read()

Методи читання:
• read() — весь вміст
• readline() — один рядок
• readlines() — список рядків
💡 Приклад коду
Вивід:

                        
📝 ЗАВДАННЯ (3)
1.
Завдання 1: Щоденник
10 XP
Напишіть програму-щоденник: користувач вводить текст, програма додає його з датою та часом у файл diary.txt. При запуску програма показує вміст щоденника.
💡 Підказка: Використовуйте from datetime import datetime та datetime.now().strftime()
🔓 Розв'язок:
from datetime import datetime
import os

if os.path.exists('diary.txt'):
    with open('diary.txt', 'r', encoding='utf-8') as f:
        print('Ваш щоденник:')
        print(f.read())

entry = input('Новий запис: ')
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M')
with open('diary.txt', 'a', encoding='utf-8') as f:
    f.write(f'[{timestamp}] {entry}\n')
print('Запис додано!')
Вивід:

                                

2.
Завдання 2: Блокнот із нотатками
20 XP
Напишіть програму-блокнот із меню: 1 — додати нотатку, 2 — показати всі нотатки, 3 — знайти нотатку за словом, 4 — вихід. Нотатки зберігаються у файл notes.txt (кожна на новому рядку) і завантажуються при запуску.
💡 Підказка: Для пошуку переберіть рядки файлу та перевірте входження слова через 'слово' in рядок. Режим 'a' для додавання.
🔓 Розв'язок:
import os

filename = 'notes.txt'

def load_notes():
    if not os.path.exists(filename):
        return []
    with open(filename, 'r', encoding='utf-8') as f:
        return [line.strip() for line in f if line.strip()]

def save_note(note):
    with open(filename, 'a', encoding='utf-8') as f:
        f.write(note + '\n')

while True:
    print('\n1-Додати  2-Показати  3-Знайти  4-Вихід')
    choice = input('Оберіть: ')
    if choice == '1':
        note = input('Нотатка: ')
        save_note(note)
        print('Збережено!')
    elif choice == '2':
        notes = load_notes()
        if not notes:
            print('Нотаток немає')
        else:
            for i, n in enumerate(notes, 1):
                print(f'{i}. {n}')
    elif choice == '3':
        word = input('Шукати: ').lower()
        notes = load_notes()
        found = [n for n in notes if word in n.lower()]
        if found:
            for n in found:
                print(f'  - {n}')
        else:
            print('Нічого не знайдено')
    elif choice == '4':
        break
Вивід:

                                

3.
Завдання 3: Статистика текстового файлу
30 XP
Напишіть програму, яка створює файл sample.txt з кількома рядками тексту (введіть з клавіатури, порожній рядок — кінець). Потім прочитайте файл і виведіть статистику: кількість рядків, слів, символів (без пробілів), найдовше слово.
💡 Підказка: Для підрахунку символів без пробілів використовуйте len(text.replace(' ', '').replace('\n', '')). Для найдовшого слова — max(words, key=len).
🔓 Розв'язок:
lines = []
print('Введіть текст (порожній рядок — кінець):')
while True:
    line = input()
    if line == '':
        break
    lines.append(line)

with open('sample.txt', 'w', encoding='utf-8') as f:
    for line in lines:
        f.write(line + '\n')

with open('sample.txt', 'r', encoding='utf-8') as f:
    text = f.read()

all_lines = text.strip().split('\n')
all_words = text.split()
chars_no_space = len(text.replace(' ', '').replace('\n', ''))
longest = max(all_words, key=len) if all_words else ''

print(f'Рядків: {len(all_lines)}')
print(f'Слів: {len(all_words)}')
print(f'Символів (без пробілів): {chars_no_space}')
print(f'Найдовше слово: "{longest}" ({len(longest)} літер)')
Вивід: