Основные методы чтения файлов в Python
Полное чтение файла методом read()
Для чтения всего содержимого файла используется метод read(), который возвращает данные в виде строки. Этот метод оптимален для небольших файлов, которые помещаются в оперативную память.
with open("example.txt", "r", encoding="utf-8") as file:
data = file.read()
print(data)
Важно: Всегда указывайте кодировку encoding="utf-8" для корректной работы с русскими символами.
Построчное чтение файла
Метод readline()
Читает файл по одной строке за вызов, что позволяет экономить память при работе с большими файлами:
with open("example.txt", "r", encoding="utf-8") as file:
line = file.readline()
while line:
print(line.strip()) # strip() убирает символы перевода строки
line = file.readline()
Метод readlines()
Читает все строки файла и возвращает их в виде списка:
with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for line in lines:
print(line.strip())
Итерация по файлу (рекомендуемый способ)
Самый эффективный способ построчного чтения:
with open("example.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip())
Запись данных в файлы Python
Полная перезапись файла
Режим 'w' полностью перезаписывает содержимое файла:
with open("example.txt", "w", encoding="utf-8") as file:
file.write("Привет, мир!\n")
file.write("Это тестовый файл.")
Добавление данных в конец файла
Режим 'a' (append) добавляет новые данные в конец файла, сохраняя существующее содержимое:
with open("example.txt", "a", encoding="utf-8") as file:
file.write("\nЭта строка будет добавлена в конец файла.")
Запись списка строк
Для записи нескольких строк используйте метод writelines():
lines = ["Первая строка\n", "Вторая строка\n", "Третья строка\n"]
with open("example.txt", "w", encoding="utf-8") as file:
file.writelines(lines)
Работа с бинарными файлами
Чтение бинарных файлов
with open("image.jpg", "rb") as file:
binary_data = file.read()
print(f"Размер файла: {len(binary_data)} байт")
Запись бинарных данных
with open("image.jpg", "wb") as file:
file.write(binary_data)
Копирование бинарных файлов
with open("source.jpg", "rb") as source:
with open("copy.jpg", "wb") as destination:
destination.write(source.read())
Обработка исключений при работе с файлами
Всегда используйте обработку исключений для надежной работы с файлами:
try:
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("Файл не найден")
except PermissionError:
print("Нет прав доступа к файлу")
except Exception as e:
print(f"Произошла ошибка: {e}")
Проверка существования файла
Перед работой с файлом проверьте его существование:
import os
if os.path.exists("example.txt"):
with open("example.txt", "r", encoding="utf-8") as file:
print(file.read())
else:
print("Файл не существует")
Работа с путями к файлам
Используйте модуль pathlib для удобной работы с путями:
from pathlib import Path
file_path = Path("data") / "example.txt"
if file_path.exists():
with open(file_path, "r", encoding="utf-8") as file:
content = file.read()
Практические примеры
Подсчет строк в файле
def count_lines(filename):
try:
with open(filename, "r", encoding="utf-8") as file:
return sum(1 for line in file)
except FileNotFoundError:
return 0
print(f"Количество строк: {count_lines('example.txt')}")
Поиск текста в файле
def search_in_file(filename, search_text):
try:
with open(filename, "r", encoding="utf-8") as file:
for line_num, line in enumerate(file, 1):
if search_text in line:
print(f"Строка {line_num}: {line.strip()}")
except FileNotFoundError:
print("Файл не найден")
Рекомендации по работе с файлами
- Всегда используйте контекстный менеджер
withдля автоматического закрытия файлов - Указывайте кодировку
encoding="utf-8"при работе с текстовыми файлами - Обрабатывайте исключения для повышения надежности кода
- Для больших файлов используйте построчное чтение для экономии памяти
- Проверяйте существование файлов перед попыткой их открытия
Эти методы и подходы обеспечат эффективную и безопасную работу с файлами в Python, независимо от их размера и содержимого.