📦 Репозиторий занятия 52

Урок 52. Основы работы с файлами

Как работать с репозиторием

Каждая карточка говорит, о чём файл, что он выводит и что в нём искать. Код виден прямо здесь: его можно скопировать одной кнопкой, скачать файл или открыть его целиком.

Маршрут изучения

  1. Прочитайте описание: по нему уже понятно, о чём файл и что он выведет.
  2. Предскажите вывод: сравните своё предположение со строкой «Что выводит».
  3. Запустите: скачайте файл или скопируйте код кнопкой и выполните его у себя.
  4. Измените: поменяйте одно условие или значение и объясните новый результат.

Файлы: рекомендуемый порядок

1
MarkdownРазбор концепции212 строк

open(): режимы, объект файла и контекстный менеджер

less_27__file_operation/theory_01__open.md

Полный обзор работы с файлами через open(filename, mode, encoding): таблица режимов (r/w/a/x и их бинарные и '+' варианты) с указанием, что происходит, если файла нет, и таблица всех методов объекта файла (read, readline, readlines, write, seek, tell, close). Отдельно подчёркнуто, что файл — это классический итератор (isinstance(f, Iterator) даёт True), и что ручной close() ненадёжен — предпочтителен with, который закрывает файл автоматически, включая пример с двумя контекстными менеджерами сразу для копирования файла в верхнем регистре.

  • open(filename, mode, encoding) — синтаксис и три основных аргумента
  • Таблица режимов: r/w/a/x и их поведение при отсутствующем файле
  • isinstance(f, Iterator) — объект файла является итератором
  • with open(...) as file — контекстный менеджер закрывает файл автоматически
  • with (open(...) as f_in, open(...) as f_out) — два менеджера одновременно, f_out.write(f_in.read().upper())
  • Таблица методов: read/read(n)/readline/readlines/write/writelines/seek/tell/flush/close
  • Режимы r+/w+/a+/x+ — одновременное чтение и запись
Показать начало файла (212 строк всего)
## Что такое файл?

**Файл** — это определённый набор байтов (то есть набор 0 и 1).

Различают
* **Текстовые** файлы и
* **Бинарные** файлы

Но если и те, и другие — это набор байтов, то в чём разница?


## Функция `open()`

Функция `open()` в Python **открывает файл** и возвращает **объект файла**, через который можно:

* читать данные
* записывать данные
* добавлять данные
* перемещаться по файлу

---

## Синтаксис

```
file = open(filename, mode, encoding)
```

### Основные аргументы:

| Аргумент   | Значение                                  | Пример                             |
| ---------- |-------------------------------------------| ---------------------------------- |
| `file`     | Путь к файлу <br>(как минимум, имя файла) | `"data.txt"`                       |
| `mode`     | Режим работы                              | `"r"`, `"w"`, `"a"`, `"rb"` и т.п. |
| `encoding` | Кодировка текста                          | `"utf-8"`, `"cp1251"`              |


Кстати, объект `file` является классическим ИТЕРАТОРОМ:

```python
from typing import Iterator

f = open('_', 'w')
print("Тип данных объекта <f>:\n", type(f))
print("Является ли объект <f> итератором?\n", isinstance(f, Iterator))

f.close()
```
---

## Режимы открытия файла (`mode`)

| Режим  | Значение         | Что делает                            | Если файла нет               |
| ------ | ---------------- | ------------------------------------- | ---------------------------- |
| `"r"`  | read             | читать файл                           | ошибка                       |
| `"w"`  | write            | записать заново (стирает содержимое!) | создаст файл                 |
| `"a"`  | append           | дописать в конец                      | создаст файл                 |
| `"x"`  | exclusive create | создать новый файл                    | ошибка, если файл существует |
| `"rb"` | read binary      | читать в бинарном виде                | ошибка                       |
| `"wb"` | write binary     | записать в бинарном виде              | создаст файл                 |
…
Проверьте себя: Чем режим 'w' отличается от 'a' при открытии уже существующего файла с данными — и что произойдёт с этими данными в каждом случае?