Найти в Дзене

Работа с файлами в Python

Файл — это объект, предоставляющий интерфейс для взаимодействия с данными на диске. В Python файлы делятся на два типа: - Текстовые: Содержат символы (открываются в режиме 'r', 'w', 'a'). - Бинарные: Хранят данные в виде байтов (режим 'b', например, 'rb' или 'wb'). Файлы открываются функцией open(), которая возвращает файловый объект. file = open("example.txt", "r") # Открытие файла для чтения 1. Режимы доступа: - 'r': Чтение (по умолчанию). - 'w': Запись (перезаписывает файл). - 'a': Добавление в конец файла. - 'r+': Чтение и запись. - 'b': Бинарный режим (например, 'wb'). 2. Кодировка: Для текстовых файлов можно указать кодировку (например, encoding='utf-8'). 3. Закрытие: Файл обязательно нужно закрывать методом close() или через контекстный менеджер. file = open("data.txt", "w", encoding="utf-8") file.close() # Всегда закрывайте файл! - read(): Читает весь файл. - readline(): Читает одну строку. - readlines(): Возвращает список строк. with open("data.txt", "r") as file: ....conten
Оглавление

Определение и основные понятия

Файл — это объект, предоставляющий интерфейс для взаимодействия с данными на диске. В Python файлы делятся на два типа:

- Текстовые: Содержат символы (открываются в режиме 'r', 'w', 'a').

- Бинарные: Хранят данные в виде байтов (режим 'b', например, 'rb' или 'wb').

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

file = open("example.txt", "r") # Открытие файла для чтения

Свойства файлов

1. Режимы доступа:

- 'r': Чтение (по умолчанию).

- 'w': Запись (перезаписывает файл).

- 'a': Добавление в конец файла.

- 'r+': Чтение и запись.

- 'b': Бинарный режим (например, 'wb').

2. Кодировка: Для текстовых файлов можно указать кодировку (например, encoding='utf-8').

3. Закрытие: Файл обязательно нужно закрывать методом close() или через контекстный менеджер.

Основные методы и операции

1. Открытие и закрытие

file = open("data.txt", "w", encoding="utf-8")
file.close() # Всегда закрывайте файл!

2. Чтение данных

- read(): Читает весь файл.

- readline(): Читает одну строку.

- readlines(): Возвращает список строк.

with open("data.txt", "r") as file:
....content = file.read() # Весь текст
....line = file.readline() # Одна строка
....lines = file.readlines() # Список строк

3. Запись данных

- write(): Записывает строку.

- writelines(): Записывает список строк.

with open("output.txt", "w") as file:
....file.write("Hello, World!\n")
....file.writelines(["Line 1\n", "Line 2\n"])

4. Навигация по файлу

- seek(offset): Перемещает курсор на позицию `offset`.

- tell(): Возвращает текущую позицию курсора.

file.seek(0) # Переход в начало файла
pos = file.tell() # Текущая позиция

Сохранение объектов в файл

1. Pickle

Модуль pickle сериализует Python-объекты в бинарный формат.

import pickle
data = {"name": "Alice", "age": 30}
# Запись
with open("data.pkl", "wb") as file:
....pickle.dump(data, file)
# Чтение
with open("data.pkl", "rb") as file:
....loaded_data = pickle.load(file)

Особенности:

- Поддерживает сложные объекты (классы, функции).

- Небезопасно: Не загружайте данные из ненадежных источников.

2. JSON

Модуль json сохраняет данные в текстовом формате, понятном другим языкам.

import json
data = {"name": "Alice", "age": 30}
# Запись
with open("data.json", "w") as file:
....json.dump(data, file)
# Чтение
with open("data.json", "r") as file:
....loaded_data = json.load(file)

Ограничения:

- Поддерживает только базовые типы (строки, числа, списки, словари).

- Для классов используйте методы __dict__ или кастомные сериализаторы.

3. Другие форматы

- CSV: Для табличных данных (модуль csv).

- YAML/XML: Для сложных структур (сторонние библиотеки, например, PyYAML).

Контекстные менеджеры (File Context Managers)

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

with open("file.txt", "r") as file:
....content = file.read()
# Файл закрыт автоматически!

Преимущества:

- Исключает утечку ресурсов.

- Упрощает код (не нужно вызывать close()).

Примеры использования

1. Построчная обработка большого файла

with open("large_file.txt", "r") as file:
....for line in file: # Файл — итерируемый объект
........print(line.strip())

2. Запись логов

import datetime
log = f"{datetime.datetime.now()}: User logged in.\n"
with open("app.log", "a") as file:
....file.write(log)

Заключение

Файлы — ключевой инструмент для работы с данными в Python. Основные правила:

- Всегда используйте контекстные менеджеры (with).

- Для объектов применяйте pickle (Python-специфично) или json (универсально).

- В бинарных файлах используйте режим 'b'.

Правильная работа с файлами предотвращает утечки памяти и обеспечивает целостность данных. Для сложных задач (например, асинхронной записи) изучайте специализированные библиотеки (например, aiofiles).