> **Источник:** https://python-all.ru/3.0/c-api/file.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Объекты файлов

Встроенные файловые объекты Python полностью реализованы на основе поддержки `FILE*` из стандартной библиотеки C. Это деталь реализации, которая может измениться в будущих версиях Python. API `PyFile_` являются обёрткой над модулем [`io`](https://python-all.ru/3.0/library/io.html#module-io).

**\[PyFile\_FromFd\]`PyFile_FromFd`(int *fd*, char *\*name*, char *\*mode*, int *buffering*, char *\*encoding*, char *\*newline*, int *closefd*)**

Создаёт новый `PyFileObject` из файлового дескриптора уже открытого файла *fd*. Аргументы *name*, *encoding* и *newline* могут быть *NULL* для использования значений по умолчанию; *buffering* может быть *-1* для использования значения по умолчанию. Возвращает *NULL* в случае ошибки.

> **Предупреждение**
>
> Будьте осторожны при смешивании потоков и дескрипторов! Дополнительную информацию см. в [документации GNU C Library](https://python-all.ru/3.0/c-api/file.html).

**\[PyObject\_AsFileDescriptor\]int `PyObject_AsFileDescriptor`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*p*)**

Возвращает файловый дескриптор, связанный с

*p*

, в виде

`int`

. Если объект является целым числом, возвращается его значение. Если нет, вызывается метод

`fileno()`

объекта, если он существует; метод должен вернуть целое число, которое возвращается в качестве значения файлового дескриптора. Устанавливает исключение и возвращает

`-1`

в случае неудачи.

**\[PyFile\_GetLine\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyFile_GetLine`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*p* *n*)**

*Возвращаемое значение: новая ссылка.*

Эта функция эквивалентна `p.readline([n])` и читает одну строку из объекта *p*. *p* может быть файловым объектом или любым объектом, имеющим метод `readline()`. Если *n* равно `0`, читается ровно одна строка, независимо от её длины. Если *n* больше `0`, из файла будет прочитано не более *n* байт; может быть возвращена неполная строка. В обоих случаях возвращается пустая строка, если конец файла достигнут сразу. Однако если *n* меньше `0`, читается одна строка независимо от длины, но если конец файла достигнут сразу, возбуждается [`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError).

**\[PyFile\_WriteObject\]int `PyFile_WriteObject`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*obj*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*p*, int *flags*)**

Записывает объект *obj* в файловый объект *p*. Единственный поддерживаемый флаг для *flags* – `Py_PRINT_RAW`; если он задан, записывается [`str()`](https://python-all.ru/3.0/library/functions.html#str) объекта вместо [`repr()`](https://python-all.ru/3.0/library/functions.html#repr). Возвращает `0` при успехе или `-1` при ошибке; будет установлено соответствующее исключение.

**\[PyFile\_WriteString\]int `PyFile_WriteString`(const char *\*s*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*p*)**

Записывает строку

*s*

в файловый объект

*p*

. Возвращает

`0`

при успехе или

`-1`

при ошибке; будет установлено соответствующее исключение.
