Загрузка данных


import os
import csv

# ================= ЗАДАНИЕ 1. Запись и чтение — «Личный дневник» =================
print("--- Задание 1: Личный дневник ---")

# 1. Создаём файл diary.txt и записываем в него 5 произвольных строк
with open('diary.txt', 'w', encoding='utf-8') as f:
    f.write("2024-01-15: Сегодня изучил работу с файлами в Python.\n")
    f.write("2024-01-16: Разобрался с циклами и условиями.\n")
    f.write("2024-01-17: Написал первую функцию.\n")
    f.write("2024-01-18: Изучил работу со списками и словарями.\n")
    f.write("2024-01-19: Понял, как работать с файлами.\n")

# 3. Выводим содержимое файла полностью через read()
print("Чтение через read():")
with open('diary.txt', 'r', encoding='utf-8') as f:
    print(f.read())

# 4. Открываем файл снова и выводим строки по одной через readline() с нумерацией
print("Чтение через readline():")
with open('diary.txt', 'r', encoding='utf-8') as f:
    line_num = 1
    while True:
        line = f.readline()
        if not line:
            break
        print(f"Строка {line_num}: {line.strip()}")
        line_num += 1

# 5. Добавляем в конец файла ещё одну запись о сегодняшнем дне
with open('diary.txt', 'a', encoding='utf-8') as f:
    f.write("2026-06-06: Выполняю практическую часть задания по Python.\n")

# 6. Выводим итоговое количество строк в файле
with open('diary.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    print(f"Итоговое количество строк в файле: {len(lines)}\n")


# ================= ЗАДАНИЕ 2. Обработка текста — «Статистика текста» =================
print("--- Задание 2: Статистика текста ---")

story_text = """В некотором царстве жил да был программист.
Каждый день он писал код и учился новому.
Однажды он открыл для себя язык Python.
С тех пор жизнь его стала намного проще и интереснее.
Программист был счастлив и продолжал учиться каждый день."""

# Записываем текст в файлwith open('story.txt', 'w', encoding='utf-8') as f:
    f.write(story_text)

# Читаем файл для анализа
with open('story.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

# 1. Общее количество строк
print(f"1. Общее количество строк: {len(lines)}")

# 2. Общее количество слов
words = story_text.split()
print(f"2. Общее количество слов: {len(words)}")

# 3. Общее количество символов (без пробелов и переносов строк)
chars = len(story_text.replace(' ', '').replace('\n', ''))
print(f"3. Общее количество символов (без пробелов и переносов): {chars}")

# 4. Самая длинная строка
longest_line = max(lines, key=len).strip()
print(f"4. Самая длинная строка: '{longest_line}'")

# 5. Количество раз, которое встречается слово "каждый" (без учёта регистра)
count_kazhd = story_text.lower().count('каждый')
print(f"5. Количество раз встречается 'каждый': {count_kazhd}")

# 6. Создаём новый файл story_upper.txt с текстом в верхнем регистре
with open('story_upper.txt', 'w', encoding='utf-8') as f:
    f.write(story_text.upper())
print("6. Файл story_upper.txt создан.\n")


# ================= ЗАДАНИЕ 3. Работа с CSV — «Ведомость студентов» =================
print("--- Задание 3: Ведомость студентов ---")

# 1. Создаём файл students.csv
students_data = [
    ['Имя', 'Фамилия', 'Оценка_Python', 'Оценка_Математика', 'Оценка_English'],
    ['Анна', 'Смирнова', '9', '8', '7'],
    ['Борис', 'Петров', '6', '7', '9'],
    ['Вера', 'Иванова', '10', '9', '8'],
    ['Денис', 'Козлов', '5', '6', '7'],
    ['Елена', 'Новикова', '8', '10', '9'],
    ['Жанна', 'Морозова', '7', '5', '8']
]

with open('students.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(students_data)
# 3. Читаем файл через csv.DictReader
students = []
with open('students.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        students.append(row)
        # Выводим все строки в читаемом формате
        print(f"{row['Имя']} {row['Фамилия']}: Python={row['Оценка_Python']}, Математика={row['Оценка_Математика']}, English={row['Оценка_English']}")

# Функция для подсчёта среднего балла
def get_avg(s):
    return (int(s['Оценка_Python']) + int(s['Оценка_Математика']) + int(s['Оценка_English'])) / 3

# Находим студента с наибольшим средним баллом
best_student = max(students, key=get_avg)
print(f"\nСтудент с наибольшим средним баллом: {best_student['Имя']} {best_student['Фамилия']} ({get_avg(best_student):.2f})")

# Находим студентов, у которых хотя бы одна оценка ниже 6
low_grades = [s for s in students if int(s['Оценка_Python']) < 6 or int(s['Оценка_Математика']) < 6 or int(s['Оценка_English']) < 6]
print("Студенты с оценкой ниже 6:")
for s in low_grades:
    print(f"- {s['Имя']} {s['Фамилия']}")

# Подсчитываем средний балл по каждому предмету
avg_py = sum(int(s['Оценка_Python']) for s in students) / len(students)
avg_math = sum(int(s['Оценка_Математика']) for s in students) / len(students)
avg_eng = sum(int(s['Оценка_English']) for s in students) / len(students)
print(f"\nСредний балл по предметам: Python={avg_py:.2f}, Математика={avg_math:.2f}, English={avg_eng:.2f}")

# 5. Создаём файл top_students.csv (студенты со средним баллом выше 7)
top_students = [s for s in students if get_avg(s) > 7]
with open('top_students.csv', 'w', encoding='utf-8', newline='') as f:
    fieldnames = ['Имя', 'Фамилия', 'Оценка_Python', 'Оценка_Математика', 'Оценка_English']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(top_students)
print("Файл top_students.csv создан.\n")


# ================= ЗАДАНИЕ 4. Файловая система — «Менеджер заметок» =================
print("--- Задание 4: Менеджер заметок ---")

# 1. Создаём папку notes/ и 3 файла
os.makedirs('notes', exist_ok=True)
notes_content = {
    'note_1.txt': "Первая заметка.\nЭто важный текст.\n",
    'note_2.txt': "Вторая заметка.\nПросто мысли.\n",
    'note_3.txt': "Третья заметка.\nСписок дел на завтра.\n"
}
for fname, content in notes_content.items():    with open(os.path.join('notes', fname), 'w', encoding='utf-8') as f:
        f.write(content)

# 2. Выводим список всех файлов в папке notes/
files = os.listdir('notes')
print("Файлы в папке notes/:", files)

# 3. Для каждого файла выводим имя, размер и первую строку
for fname in files:
    path = os.path.join('notes', fname)
    if os.path.isfile(path):
        size = os.path.getsize(path)
        with open(path, 'r', encoding='utf-8') as f:
            first_line = f.readline().strip()
        print(f"Имя: {fname}, Размер: {size} байт, Первая строка: '{first_line}'")

# 4. Переименовываем note_1.txt в note_important.txt
os.rename(os.path.join('notes', 'note_1.txt'), os.path.join('notes', 'note_important.txt'))
print("\nФайл note_1.txt переименован в note_important.txt")

# 5. Проверяем существование note_999.txt
exists_999 = os.path.exists(os.path.join('notes', 'note_999.txt'))
print(f"Существует ли note_999.txt? {exists_999}")

# 6. Создаём notes/index.txt со списком заметок и их размерами
with open(os.path.join('notes', 'index.txt'), 'w', encoding='utf-8') as f:
    for fname in os.listdir('notes'):
        path = os.path.join('notes', fname)
        if os.path.isfile(path) and fname != 'index.txt':
            size = os.path.getsize(path)
            f.write(f"{fname}: {size} байт\n")
print("Файл notes/index.txt создан.\n")


# ================= ЗАДАНИЕ 5. Комплексное задание — «Анализ лог-файла» =================
print("--- Задание 5: Анализ лог-файла ---")

# 1. Создаём файл app.log с 15 строками
log_lines = [
    "[INFO] 2024-01-15 10:00:01 Приложение запущено",
    "[INFO] 2024-01-15 10:01:05 Пользователь admin вошёл в систему",
    "[WARNING] 2024-01-15 10:02:30 Низкий уровень памяти: 85%",
    "[INFO] 2024-01-15 10:03:00 Загрузка данных завершена",
    "[ERROR] 2024-01-15 10:05:12 Не удалось подключиться к базе данных",
    "[INFO] 2024-01-15 10:06:00 Повторная попытка подключения",
    "[INFO] 2024-01-15 10:06:05 Подключение установлено",
    "[WARNING] 2024-01-15 10:07:00 Высокая загрузка процессора: 92%",
    "[INFO] 2024-01-15 10:08:00 Обработка запросов",
    "[ERROR] 2024-01-15 10:09:15 Ошибка таймаута при отправке отчета",
    "[INFO] 2024-01-15 10:10:00 Запрос к API выполнен",    "[INFO] 2024-01-15 10:11:00 Сохранение результатов",
    "[WARNING] 2024-01-15 10:12:00 Медленный отклик от внешнего сервиса",
    "[INFO] 2024-01-15 10:13:00 Завершение фоновых задач",
    "[ERROR] 2024-01-15 10:14:00 Критическая ошибка в модуле аналитики"
]

with open('app.log', 'w', encoding='utf-8') as f:
    f.write('\n'.join(log_lines) + '\n')

# 3. Читаем файл и анализируем
with open('app.log', 'r', encoding='utf-8') as f:
    lines = f.readlines()

print(f"Общее количество строк в логе: {len(lines)}")

info_count = sum(1 for l in lines if '[INFO]' in l)
warning_count = sum(1 for l in lines if '[WARNING]' in l)
error_count = sum(1 for l in lines if '[ERROR]' in l)

print(f"Количество записей INFO: {info_count}")
print(f"Количество записей WARNING: {warning_count}")
print(f"Количество записей ERROR: {error_count}")

print("\nСтроки с уровнем ERROR:")
error_lines = [l.strip() for l in lines if '[ERROR]' in l]
for el in error_lines:
    print(el)

# 5. Создаём отдельные файлы errors.log, warnings.log, info.log
with open('errors.log', 'w', encoding='utf-8') as f:
    f.write('\n'.join(error_lines) + '\n')

warning_lines = [l.strip() for l in lines if '[WARNING]' in l]
with open('warnings.log', 'w', encoding='utf-8') as f:
    f.write('\n'.join(warning_lines) + '\n')

info_lines = [l.strip() for l in lines if '[INFO]' in l]
with open('info.log', 'w', encoding='utf-8') as f:
    f.write('\n'.join(info_lines) + '\n')

# 7. Создаём файл report.txt со сводкой
report = f"""=== Отчёт по лог-файлу ===
Всего записей: {len(lines)}
INFO: {info_count}
WARNING: {warning_count}
ERROR: {error_count}
Критичных ошибок требует внимания: {error_count}"""

with open('report.txt', 'w', encoding='utf-8') as f:
    f.write(report)
print("\nФайлы errors.log, warnings.log, info.log и report.txt созданы.")