Файловый ввод-вывод в Python: полный обзор

Раздел: Работа с файлами -> Файловый ввод-вывод

Основные функции для работы с файлами в Python

Наиболее эффективный подход:

Для открытия и работы с файлами в Python рекомендуется использовать менеджер контекста with вместе с функцией open(). Это гарантирует автоматическое закрытие файла даже при возникновении исключений.


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

ввод программ на python (ввод данных в программе python)

Файл будет закрыт после выхода из блока with. Вторым аргументом передаётся режим открытия ('r' – чтение, 'w' – запись, 'a' – добавление). Указание кодировки encoding='utf-8' помогает избежать проблем с текстом.

Как открыть файл с разными режимами доступа?

Режимы определяют, как именно можно взаимодействовать с файлом:

  • 'r' – чтение (файл должен существовать);
  • 'w' – запись (содержимое файла перезаписывается или создаётся новый);
  • 'a' – добавление в конец файла;
  • 'rb' – чтение в двоичном режиме;
  • 'wb' – запись в двоичном режиме;
  • 'r+' – чтение и запись без усечения.

# Чтение бинарного файла (например, изображения)
with open('image.jpg', 'rb') as f:
    data = f.read()
    print(f'Байтов прочитано: {len(data)}')
  

Python file io (ввод-вывод файлов в python)

Типичная ошибка:

Попытка открыть несуществующий файл в режиме 'r' вызывает исключение FileNotFoundError. Решение – проверить существование файла с помощью os.path.exists() или обработать исключение.

Как прочитать файл целиком или построчно?

Метод read() возвращает всё содержимое в виде строк (или байтов в двоичном режиме). Для построчного чтения применяют readline() или readlines(). Наиболее эффективный способ – итерация по объекту файла:


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

Python temp files (временные файлы в python)

Цикл for загружает строки по одной, что экономит память при больших файлах.

Распространённая проблема:

Использование readlines() для огромного файла может привести к переполнению памяти. В таких случаях лучше читать построчно.

Как записать данные в файл?

Метод write() записывает строку. Метод writelines() принимает последовательность строк (без автоматических символов новой строки). Пример:


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

Python index files (индексация файлов в python)

Ошибка:

Забыли указать режим 'w', по умолчанию 'r' – файл не откроется для записи.

Как управлять позицией чтения/записи?

Метод seek(offset, whence) перемещает указатель на заданное количество байтов от начала (whence=0), текущей позиции (1) или конца файла (2). Метод tell() возвращает текущую позицию.


with open('data.bin', 'rb') as f:
    f.seek(10)
    chunk = f.read(5)
    print(f'Прочитано 5 байт после 10-го байта: {chunk}')
  

File python class (класс для работы с файлами в python)

Частая ошибка:

В текстовом режиме ('r') seek может работать некорректно с многобайтовыми кодировками (например, UTF-8). Для точного позиционирования используйте двоичный режим.

Как проверить существование файла и другие атрибуты?

Модуль os.path предоставляет функции exists(), isfile(), isdir() и другие. Современная альтернатива – модуль pathlib.


from pathlib import Path

file_path = Path('data.txt')
if file_path.exists():
    print(f'Размер: {file_path.stat().st_size} байт')
else:
    print('Файл не найден')
  

Python file utf 8 (кодировка utf-8 для файлов в python)

Ошибка:

Использование os.path.exists без проверки типа может ввести в заблуждение, если путь указывает на директорию, а не файл.

Как обработать исключения при работе с файлами?

Блоки try-except-finally помогают перехватывать ошибки ввода-вывода.


try:
    with open('missing.txt', 'r') as f:
        content = f.read()
except FileNotFoundError:
    print('Файл не существует')
except PermissionError:
    print('Нет прав доступа')
  

Совет:

Избегайте голого except – это скрывает непредвиденные ошибки.

- Python log file (логирование в файл в python)
- Python file methods (методы работы с файлами в python)
- File models in python (модели файлов в python)

Расширенные примеры работы с файлами

Чтение большого файла частями

Когда файл слишком велик для загрузки в память, читайте его блоками фиксированного размера.

Пример

chunk_size = 1024 * 1024  # 1 MB
with open('large_file.bin', 'rb') as f:
    while True:
        chunk = f.read(chunk_size)
        if not chunk:
            break
        # Обработка чанка (например, запись в другой файл)
        with open('copy_large.bin', 'ab') as out:
            out.write(chunk)
  
(Файл 'copy_large.bin' будет создан как копия 'large_file.bin')
  

Сериализация объектов с помощью pickle

Модуль pickle позволяет сохранять и загружать произвольные объекты Python.

Пример

import pickle

data = {'ключ': 'значение', 'список': [1, 2, 3]}

# Сохранение
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# Загрузка
with open('data.pkl', 'rb') as f:
    restored = pickle.load(f)
print(restored)
  
{'ключ': 'значение', 'список': [1, 2, 3]}
  

Безопасность:

Не используйте pickle для данных из ненадёжных источников – это может привести к выполнению произвольного кода.

Запись CSV с именованными столбцами

Модуль csv облегчает работу с таблицами.

Пример

import csv

rows = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25}
]

with open('people.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=['name', 'age'])
    writer.writeheader()
    writer.writerows(rows)
  
(Создан файл 'people.csv' с заголовком и двумя строками)
  

Работа с путями с помощью pathlib

Класс Path предоставляет удобные методы для манипуляции файловой системой.

Пример

from pathlib import Path

p = Path('temp_dir/subdir')
p.mkdir(parents=True, exist_ok=True)  # Создание директории

file_path = p / 'test.txt'
file_path.write_text('Содержимое файла', encoding='utf-8')
print(file_path.read_text(encoding='utf-8'))
  
Содержимое файла
  

Использование временных файлов

Модуль tempfile создаёт временные файлы, которые автоматически удаляются.

Пример

import tempfile

with tempfile.NamedTemporaryFile(mode='w', delete=False) as tf:
    tf.write('Временные данные')
    print(f'Создан временный файл: {tf.name}')
  
Создан временный файл: /tmp/tmpXXXXXX
  

Функции для работы с файлами в Python - comments

En
File functions python (python)