Работа с файлами в Python
Работа с файлами в Python
Определение и основные понятия
Файл — это объект, предоставляющий интерфейс для взаимодействия с данными на диске. В Python файлы делятся на два типа:
- Текстовые: Содержат символы (открываются в режиме
'r','w','a'). - Бинарные: Хранят данные в виде байтов (режим
'b', например,'rb'или'wb').
Файлы открываются функцией open(), которая возвращает файловый объект.
file = open("example.txt", "r") # Открытие файла для чтения
Свойства файлов
-
Режимы доступа:
'r': Чтение (по умолчанию).'w': Запись (перезаписывает файл).'a': Добавление в конец файла.'r+': Чтение и запись.'b': Бинарный режим (например,'wb').
-
Кодировка: Для текстовых файлов можно указать кодировку (например,
encoding='utf-8'). -
Закрытие: Файл обязательно нужно закрывать методом
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).