file.md
1> **Источник:** https://python-all.ru/3.1/c-api/file.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты файлов89Эти API представляют собой минимальную эмуляцию C API Python 2 для встроенных файловых объектов, которые раньше полагались на поддержку буферизованного ввода-вывода (`FILE*`) из стандартной библиотеки C. В Python 3 файлы и потоки используют новый модуль [`io`](https://python-all.ru/3.1/library/io.html#module-io), который определяет несколько уровней поверх низкоуровневого небуферизованного ввода-вывода операционной системы. Описанные ниже функции – это удобные C-обёртки над этими новыми API, предназначенные в основном для внутреннего сообщения об ошибках в интерпретаторе; стороннему коду рекомендуется вместо этого использовать API [`io`](https://python-all.ru/3.1/library/io.html#module-io).1011**`PyFile_FromFd`(int *fd*, char *\*name*, char *\*mode*, int *buffering*, char *\*encoding*, char *\*errors*, char *\*newline*, int *closefd*)**1213Создаёт объект Python-файла из файлового дескриптора уже открытого файла *fd*. Аргументы *name*, *encoding*, *errors* и *newline* могут быть *NULL*, чтобы использовать значения по умолчанию; *buffering* может быть *-1* для использования значения по умолчанию. В случае ошибки возвращает *NULL*. За более подробным описанием аргументов обратитесь к документации функции [`io.open()`](https://python-all.ru/3.1/library/io.html#io.open).1415> **Предупреждение**16>17> Поскольку потоки Python имеют собственный уровень буферизации, их смешивание с файловыми дескрипторами ОС может вызвать различные проблемы (например, непредсказуемый порядок данных).1819**int `PyObject_AsFileDescriptor`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**2021Возвращает файловый дескриптор, связанный с2223*p*2425, в виде2627`int`2829. Если объект является целым числом, возвращается его значение. Если нет, вызывается метод3031`fileno()`3233объекта, если он существует; метод должен вернуть целое число, которое возвращается в качестве значения файлового дескриптора. Устанавливает исключение и возвращает3435`-1`3637в случае неудачи.3839**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyFile_GetLine`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*, int *n*)**4041*Возвращаемое значение: новая ссылка.*4243Эта функция эквивалентна `p.readline([n])` и читает одну строку из объекта *p*. *p* может быть файловым объектом или любым объектом, имеющим метод `readline()`. Если *n* равно `0`, читается ровно одна строка, независимо от её длины. Если *n* больше `0`, из файла будет прочитано не более *n* байт; может быть возвращена неполная строка. В обоих случаях возвращается пустая строка, если конец файла достигнут сразу. Однако если *n* меньше `0`, читается одна строка независимо от длины, но если конец файла достигнут сразу, возбуждается [`EOFError`](https://python-all.ru/3.1/library/exceptions.html#EOFError).4445**int `PyFile_WriteObject`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*obj*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*, int *flags*)**4647Записывает объект *obj* в файловый объект *p*. Единственный поддерживаемый флаг для *flags* – `Py_PRINT_RAW`; если он задан, записывается [`str()`](https://python-all.ru/3.1/library/functions.html#str) объекта вместо [`repr()`](https://python-all.ru/3.1/library/functions.html#repr). Возвращает `0` при успехе или `-1` при ошибке; будет установлено соответствующее исключение.4849**int `PyFile_WriteString`(const char *\*s*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**5051Записывает строку5253*s*5455в файловый объект5657*p*5859. Возвращает6061`0`6263при успехе или6465`-1`6667при ошибке; будет установлено соответствующее исключение.68