Работа с текстовыми файлами (TXT): примеры

Работа с текстовыми файлами (TXT): примеры Работа с файлами

Привет! Ты уже умеешь читать и записывать данные, но пришло время научиться работать с реальными файлами. Текстовые файлы — самый простой способ хранить информацию: логи, настройки, данные, стихи… В Python работать с ними очень просто и удобно.

В этой статье мы разберём:

  • Как открывать и закрывать файлы
  • Режимы открытия: rwar+
  • Как читать файл целиком и по строкам
  • Как записывать и добавлять данные
  • Менеджер контекста with
  • Практические примеры
Содержание
  1. Что нужно знать перед началом
  2. Основная часть
  3. Открытие файла: open()
  4. Режимы открытия файлов
  5. Чтение файлов: read(), readline(), readlines()
  6. read() — читает весь файл целиком
  7. readline() — читает одну строку
  8. readlines() — читает все строки в список
  9. Итерация по файлу (самый эффективный способ)
  10. Запись файлов: write(), writelines()
  11. write() — записывает одну строку
  12. writelines() — записывает список строк
  13. Добавление в конец файла (append)
  14. Менеджер контекста with
  15. Обработка ошибок при работе с файлами
  16. Работа с кодировками
  17. Практические примеры
  18. Логирование действий в файл
  19. Сохранение списка задач в файл
  20. Подсчёт слов в тексте
  21. Объединение нескольких файлов
  22. Задачи для закрепления
  23. Нюансы и подводные камни
  24. Кодировки
  25. Символы новой строки
  26. Режим ‘w’ перезаписывает файл
  27. Частые ошибки и как их избежать
  28. Ошибка 1: Забыл закрыть файл
  29. Ошибка 2: Неправильный режим открытия
  30. Ошибка 3: Забыл \n при записи
  31. Шпаргалка
  32. Заключение
  33. КВИЗ
  34. Что дальше?

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный Python (модули для работы с файлами встроенные)
  • Базовое понимание строк и списков

Совет: Всегда используй менеджер контекста with — он автоматически закрывает файл, даже если произошла ошибка.

Основная часть

Открытие файла: open()

Функция open() открывает файл и возвращает файловый объект.

# Базовый синтаксис
file = open('example.txt', 'r')  # Открываем для чтения
content = file.read()
file.close()  # Всегда закрываем!
print(content)

Совет: Не забывай закрывать файлы! Иначе могут возникнуть проблемы с памятью и блокировкой файлов.

Режимы открытия файлов

РежимОписание
'r'Чтение (файл должен существовать)
'w'Запись (создаёт новый или перезаписывает)
'a'Добавление в конец файла
'r+'Чтение и запись (файл должен существовать)
'x'Создание нового файла (ошибка, если существует)
# Чтение (файл должен существовать)
file = open('data.txt', 'r')

# Запись (перезаписывает файл)
file = open('output.txt', 'w')

# Добавление в конец
file = open('log.txt', 'a')

# Чтение и запись
file = open('data.txt', 'r+')

Совет: Для текстовых файлов используй 'r''w''a'. Для бинарных — 'rb''wb'.

Чтение файлов: read(), readline(), readlines()

read() — читает весь файл целиком

with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)
# Чтение первых N символов
with open('example.txt', 'r', encoding='utf-8') as file:
    first_100 = file.read(100)
    print(first_100)

readline() — читает одну строку

with open('example.txt', 'r', encoding='utf-8') as file:
    line1 = file.readline()
    line2 = file.readline()
    print(f"Строка 1: {line1.strip()}")
    print(f"Строка 2: {line2.strip()}")

readlines() — читает все строки в список

with open('example.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    print(lines)  # ['Строка 1\n', 'Строка 2\n', 'Строка 3\n']
    
    # Убираем \n
    lines_clean = [line.strip() for line in lines]
    print(lines_clean)  # ['Строка 1', 'Строка 2', 'Строка 3']

Итерация по файлу (самый эффективный способ)

with open('example.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line.strip())

Совет: Для больших файлов всегда используй итерацию по файлу — это не загружает весь файл в память!

Запись файлов: write(), writelines()

write() — записывает одну строку

with open('output.txt', 'w', encoding='utf-8') as file:
    file.write('Первая строка\n')
    file.write('Вторая строка\n')

writelines() — записывает список строк

lines = [
    'Строка 1\n',
    'Строка 2\n',
    'Строка 3\n'
]

with open('output.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

Совет: writelines() не добавляет переносы строк автоматически. Нужно добавлять \n вручную!

Добавление в конец файла (append)

Используй режим 'a' (append):

with open('log.txt', 'a', encoding='utf-8') as file:
    file.write('Новая запись в логе\n')
    file.write('Ещё одна запись\n')

Менеджер контекста with

with автоматически закрывает файл, даже если произошла ошибка.

# Без with (небезопасно)
file = open('data.txt', 'r')
content = file.read()
file.close()  # Если ошибка до close() — файл не закроется

# С with (безопасно)
with open('data.txt', 'r') as file:
    content = file.read()
# Файл автоматически закрыт

Совет: Всегда используй with! Это безопаснее и короче.

Обработка ошибок при работе с файлами

def safe_read_file(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError:
        print(f"Ошибка: файл {filename} не найден")
        return None
    except PermissionError:
        print(f"Ошибка: нет доступа к файлу {filename}")
        return None
    except UnicodeDecodeError:
        print(f"Ошибка: файл {filename} в другой кодировке")
        return None

# Использование
content = safe_read_file('missing.txt')

Работа с кодировками

# Русский текст — обязательно указывай encoding='utf-8'
with open('russian.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

# При записи тоже указывай
with open('russian.txt', 'w', encoding='utf-8') as file:
    file.write('Привет, мир!')

Совет: Никогда не забывай encoding='utf-8' для русских текстов!

Практические примеры

Логирование действий в файл

import datetime

def log_message(message):
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    with open('log.txt', 'a', encoding='utf-8') as file:
        file.write(f"[{timestamp}] {message}\n")

# Использование
log_message('Программа запущена')
log_message('Пользователь вошёл в систему')
log_message('Программа завершена')

Сохранение списка задач в файл

def save_tasks(tasks):
    with open('tasks.txt', 'w', encoding='utf-8') as file:
        for task in tasks:
            file.write(f"{task}\n")

def load_tasks():
    try:
        with open('tasks.txt', 'r', encoding='utf-8') as file:
            return [line.strip() for line in file]
    except FileNotFoundError:
        return []

# Использование
tasks = ['Купить хлеб', 'Сделать домашку', 'Позвонить маме']
save_tasks(tasks)

loaded = load_tasks()
print("Загруженные задачи:")
for task in loaded:
    print(f"  • {task}")

Подсчёт слов в тексте

def count_words_in_file(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            content = file.read()
            words = content.split()
            return len(words)
    except FileNotFoundError:
        print(f"Файл {filename} не найден")
        return 0

# Использование
word_count = count_words_in_file('example.txt')
print(f"Количество слов в файле: {word_count}")

Объединение нескольких файлов

def merge_files(input_files, output_file):
    with open(output_file, 'w', encoding='utf-8') as outfile:
        for filename in input_files:
            try:
                with open(filename, 'r', encoding='utf-8') as infile:
                    content = infile.read()
                    outfile.write(f"\n--- {filename} ---\n")
                    outfile.write(content)
                    outfile.write("\n")
            except FileNotFoundError:
                print(f"Предупреждение: файл {filename} не найден")

# Использование
merge_files(['file1.txt', 'file2.txt', 'file3.txt'], 'merged.txt')

Задачи для закрепления

Задача 1. Открой файл data.txt для чтения и выведи его содержимое.

Задача 2. Запиши список строк ['line1', 'line2', 'line3'] в файл output.txt.

Задача 3. Добавь строку ‘Новая строка’ в конец файла data.txt.

Задача 4. Напиши функцию, которая читает файл и возвращает количество строк в нём.

Задача 5. Объясни разницу между read() и readlines().

Ответы:

Задача 1.

with open('data.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

Задача 2.

lines = ['line1\n', 'line2\n', 'line3\n']
with open('output.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

Задача 3.

with open('data.txt', 'a', encoding='utf-8') as file:
    file.write('Новая строка\n')

Задача 4.

def count_lines(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            return len(file.readlines())
    except FileNotFoundError:
        return 0

Задача 5.

read() возвращает весь файл как одну строку. readlines() возвращает список строк (каждая строка — элемент списка).

Нюансы и подводные камни

Кодировки

Если не указать encoding, Python использует кодировку по умолчанию. Это может привести к ошибкам. Всегда указывай encoding='utf-8'.

Символы новой строки

В разных ОС символы новой строки отличаются:

  • Windows: \r\n
  • Linux/Mac: \n

Python автоматически преобразует их, если нужно.

Режим ‘w’ перезаписывает файл

Будь осторожен: режим 'w' уничтожает всё содержимое файла при открытии!

Частые ошибки и как их избежать

Ошибка 1: Забыл закрыть файл

# Плохо — файл не закрыт
file = open('data.txt', 'r')
content = file.read()

# Хорошо — with закрывает автоматически
with open('data.txt', 'r') as file:
    content = file.read()

Ошибка 2: Неправильный режим открытия

# Ошибка — файл не существует
with open('missing.txt', 'r') as file:
    content = file.read()

# Проверь существование или используй try-except

Ошибка 3: Забыл \n при записи

# Все строки склеятся
file.write('Строка 1')
file.write('Строка 2')
# Результат: Строка 1Строка 2

# Добавляй переносы
file.write('Строка 1\n')
file.write('Строка 2\n')

Шпаргалка

Что нужноКак пишется
Открыть для чтенияopen('file.txt', 'r')
Открыть для записиopen('file.txt', 'w')
Открыть для добавленияopen('file.txt', 'a')
Безопасное открытиеwith open('file.txt', 'r') as file:
Прочитать весь файлcontent = file.read()
Прочитать строкуline = file.readline()
Прочитать все строкиlines = file.readlines()
Прочитать по строкам (эффективно)for line in file:
Записать строкуfile.write('текст\n')
Записать список строкfile.writelines(list)
Указать кодировкуencoding='utf-8'

Заключение

Сегодня мы научились:

  • Открывать файлы в разных режимах (rwar+)
  • Читать файлы через read()readline()readlines()
  • Записывать через write() и writelines()
  • Использовать with для безопасной работы
  • Обрабатывать ошибки с try-except

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×