Практические примеры операций с файлами

Раздел: Ввод-вывод -> Файловый ввод-вывод

Основные способы работы с файлами в Python

Как правильно открывать и закрывать файлы, чтобы избежать утечки ресурсов?

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


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

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

Результат: содержимое файла выводится в консоль. Проблемы могут возникнуть, если файл не существует (возникает FileNotFoundError). Решение - предварительная проверка существования файла или перехват исключения.

Типичная ошибка: забыть закрыть файл при использовании open() без менеджера контекста. Например:


file = open('test.txt', 'w')
file.write('данные')
# файл не закрыт – возможна потеря данных
    

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

Решение: всегда использовать with или явно вызывать file.close().

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

Метод read() возвращает всё содержимое файла как одну строку (или байты для бинарных файлов). Подходит для небольших файлов.


with open('readme.txt', 'r') as f:
    data = f.read()
print(type(data), len(data))
  

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

Результат: <class 'str'> и длина строки.

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

Метод readlines() возвращает список строк с сохранением символов новой строки. Удобно для обработки каждой строки отдельно.


with open('lines.txt', 'r') as f:
    lines = f.readlines()
for line in lines:
    print(line.strip())
  

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

Обратите внимание: для больших файлов такой подход может потреблять много памяти. Альтернатива - итерация по файлу.

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

Режим 'w' перезаписывает файл. Метод write() принимает строку.


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

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

Ошибка: если не указать encoding, в Windows может использоваться системная кодировка (например, cp1251), что приведёт к проблемам с Unicode. Рекомендуется всегда указывать encoding='utf-8'.

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

Режим 'a' (append) добавляет данные в конец, не удаляя предыдущее содержимое.


with open('log.txt', 'a', encoding='utf-8') as f:
    f.write('Новая запись\n')
  

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

Как работать с бинарными файлами (изображения, архивы)?

Используются режимы 'rb' (чтение) и 'wb' (запись). Данные читаются и записываются как байты.


with open('image.png', 'rb') as src, open('copy.png', 'wb') as dst:
    dst.write(src.read())
  

Python config files (конфигурационные файлы в python)

Такой код создаёт копию файла. Для больших файлов лучше читать блоками для экономии памяти.

Как записать список строк в файл без лишних символов новой строки?

Метод writelines() принимает итерируемый объект со строками. Важно: он не добавляет символы новой строки автоматически, их нужно предусмотреть в самих строках.


lines = ['строка1\n', 'строка2\n', 'строка3']
with open('list_output.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)
  

Python copy file (копирование файла в python)

Как обрабатывать ошибки открытия файла?

Исключения FileNotFoundError (файл не найден), PermissionError (нет прав), IsADirectoryError (попытка открыть директорию) и другие. Обработка через try/except.


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

Python log file (логирование в файл в python)

Как узнать текущую позицию в файле и переместиться?

Методы tell() и seek(). Полезно для работы с файлами произвольного доступа.


with open('data.bin', 'rb') as f:
    f.seek(10)
    chunk = f.read(5)
f.seek(0, 2)  # в конец
print('Позиция в конце:', f.tell())
  

Python file methods (методы работы с файлами в python)

Как читать файл большими кусками (чанками) для экономии памяти?

Для больших файлов (например, гигабайтные логи) используют чтение фиксированными блоками.


chunk_size = 1024 * 1024  # 1 МБ
with open('huge_file.bin', 'rb') as f:
    while chunk := f.read(chunk_size):
        process(chunk)  # обработка блока данных
  

Проблема: в бинарном режиме чтение блока может вернуть меньше байтов, чем запрошено (если конец файла). Проверка chunk на пустоту решает эту задачу.

- Python open file read (открытие файла для чтения в python)
- Python file position (позиционирование в файле python)
- Python line find (поиск строки в файле python)

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

Как читать CSV-файл с помощью встроенного модуля csv?

Модуль csv упрощает разбор строк с разделителями. Пример чтения и вывода как словарей:

Пример

import csv

with open('users.csv', 'r', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['name'], row['email'])
  

Результат: для каждой строки выводится имя и email.

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

Модуль json с параметрами indent, ensure_ascii:

Пример

import json

data = {'name': 'Анна', 'age': 30, 'city': 'Москва'}
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
  

Файл будет содержать отформатированный JSON с кириллицей.

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

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

Пример

import tempfile

with tempfile.NamedTemporaryFile(mode='w', delete=False) as tmp:
    tmp.write('временные данные')
    tmp_path = tmp.name

print('Временный файл:', tmp_path)
# После завершения работы файл можно удалить вручную
  

Параметр delete=False оставляет файл для последующего использования.

Как читать текстовый файл с нестандартной кодировкой?

Параметр encoding позволяет указать любую кодировку. Пример с cp1251:

Пример

with open('doc_win.txt', 'r', encoding='cp1251') as f:
    print(f.read())
  

Ошибка: если кодировка неверна, возникнет UnicodeDecodeError. Можно использовать errors='replace' или errors='ignore' для пропуска некорректных символов.

Как записывать структурированные бинарные данные с помощью модуля struct?

Для работы с файлами фиксированного формата (например, заголовки BMP):

Пример

import struct

# Запись двух целых чисел (4 байта каждое) и строки
with open('binary.dat', 'wb') as f:
    data = struct.pack('i i 5s', 42, 256, b'hello')
    f.write(data)

# Чтение
with open('binary.dat', 'rb') as f:
    unpacked = struct.unpack('i i 5s', f.read(13))
print(unpacked)
  

Результат: (42, 256, b'hello').

Как одновременно читать и записывать в один файл (режим r+)?

Режим 'r+' позволяет читать и писать, не пересоздавая файл. Важно правильно управлять позицией.

Пример

with open('test.txt', 'r+', encoding='utf-8') as f:
    content = f.read()
    f.seek(0)
    f.write('Новое начало\n' + content)
  

Пример добавляет строку в начало файла. Ошибка: если не перейти в начало после чтения, запись начнётся с текущей позиции.

Как использовать объект Path из pathlib для работы с путями?

Модуль pathlib предоставляет объектно-ориентированный интерфейс. Пример чтения и записи:

Пример

from pathlib import Path

p = Path('data')
p.mkdir(exist_ok=True)
file_path = p / 'example.txt'
file_path.write_text('Содержимое', encoding='utf-8')
print(file_path.read_text(encoding='utf-8'))
  

Как обрабатывать файлы внутри zip-архива без распаковки?

Модуль zipfile позволяет читать/писать архивы напрямую:

Пример

import zipfile

with zipfile.ZipFile('archive.zip', 'w') as z:
    z.writestr('hello.txt', 'Здравствуйте!')

with zipfile.ZipFile('archive.zip', 'r') as z:
    with z.open('hello.txt') as f:
        print(f.read().decode('utf-8'))
  

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

Итерация построчно с помощью for line in file или генератор:

Пример

def read_large_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            yield line

for line in read_large_file('huge.log'):
    if 'ERROR' in line:
        print(line.strip())
  

Память расходуется только на одну строку.

Примеры работы с файлами в Python - comments

En
файлы в python примеры (python)