← Назад к вопросам
Какие знаешь способы чтения файлов с диска?
1.0 Junior🔥 71 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Способы чтения файлов с диска в Python
В Python есть множество способов читать файлы, каждый из которых подходит для разных сценариев — от простого текста до больших бинарных данных.
1. Встроенная функция open()
Самый базовый и универсальный способ:
# Чтение всего файла в строку
with open('file.txt', 'r') as f:
content = f.read()
# Чтение по строкам в список
with open('file.txt', 'r') as f:
lines = f.readlines() # Включает символ новой строки
# Чтение по одной строке за раз
with open('file.txt', 'r') as f:
for line in f:
print(line.strip())
Параметры open():
mode: 'r' (чтение), 'w' (запись), 'a' (добавление), 'b' (бинарный)encoding: 'utf-8' (по умолчанию в Python 3)buffering: размер буфера
2. Итерирование по файлу
Эффективно для больших файлов, так как читает по частям:
# По строкам (самый эффективный способ для больших файлов)
with open('large_file.txt', 'r') as f:
for line in f:
process(line.strip())
# По блокам
with open('large_file.txt', 'r') as f:
while True:
chunk = f.read(8192) # 8KB блоки
if not chunk:
break
process(chunk)
3. Чтение JSON
import json
with open('data.json', 'r') as f:
data = json.load(f) # Парсинг JSON
print(data['key'])
# С обработкой ошибок
try:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
print(f'Ошибка: {e}')
4. Чтение CSV файлов
import csv
# Простой способ
with open('data.csv', 'r') as f:
reader = csv.DictReader(f) # Читает как словари
for row in reader:
print(row['name'])
# С использованием DictReader
with open('data.csv', 'r') as f:
reader = csv.DictReader(f, fieldnames=['id', 'name', 'age'])
for row in reader:
print(row)
5. Чтение бинарных файлов
# Чтение всего файла
with open('image.png', 'rb') as f:
binary_data = f.read()
# Чтение по блокам
with open('large_file.bin', 'rb') as f:
while True:
block = f.read(1024) # 1KB блоки
if not block:
break
process_block(block)
6. Использование pathlib (современный подход)
from pathlib import Path
# Чтение всего файла в строку
content = Path('file.txt').read_text(encoding='utf-8')
# Чтение в бинарном режиме
binary_data = Path('image.png').read_bytes()
# Проверка существования
if Path('file.txt').exists():
print('Файл существует')
# Получение информации о файле
path = Path('file.txt')
print(path.stat().st_size) # Размер файла
print(path.suffix) # Расширение файла
7. Чтение с обработкой кодировки
# UTF-8 (по умолчанию)
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
# Другие кодировки
with open('file.txt', 'r', encoding='cp1251') as f:
content = f.read()
# С обработкой ошибок кодировки
with open('file.txt', 'r', encoding='utf-8', errors='replace') as f:
content = f.read() # Заменяет неправильные символы
8. Чтение с использованием mmap (для больших файлов)
import mmap
# Отображение файла в память
with open('large_file.txt', 'r+b') as f:
with mmap.mmap(f.fileno(), 0) as mmapped_file:
# Очень быстрый доступ к любой части файла
print(mmapped_file[0:100])
9. Потоковое чтение для больших файлов
def read_in_chunks(file_path, chunk_size=8192):
'''Генератор для чтения файла по блокам.'''
with open(file_path, 'r') as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
yield chunk
# Использование
for chunk in read_in_chunks('large_file.txt'):
process(chunk)
10. Чтение конкретных строк
# Чтение конкретной строки
with open('file.txt', 'r') as f:
lines = f.readlines()
line_10 = lines[9] # 10-я строка
# Более эффективно для больших файлов
def get_line(file_path, line_number):
with open(file_path, 'r') as f:
for i, line in enumerate(f, 1):
if i == line_number:
return line
return None
11. Контекстный менеджер with
Всегда используй with для работы с файлами:
# Хорошо: автоматически закрывает файл
with open('file.txt', 'r') as f:
content = f.read()
# Плохо: файл может остаться открытым
f = open('file.txt', 'r')
content = f.read()
# забыли закрыть!
12. Обработка ошибок при чтении
from pathlib import Path
try:
with open('file.txt', 'r') as f:
content = f.read()
except FileNotFoundError:
print('Файл не найден')
except PermissionError:
print('Нет прав доступа')
except UnicodeDecodeError:
print('Ошибка кодировки, попробуем другую')
with open('file.txt', 'r', encoding='latin-1') as f:
content = f.read()