file.md
1> **Источник:** https://python-all.ru/3.7/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.7/library/io.html#module-io), который определяет несколько уровней поверх низкоуровневого небуферизированного ввода-вывода операционной системы. Описанные ниже функции – это удобные обёртки на C для этих новых API, предназначенные в основном для внутреннего сообщения об ошибках в интерпретаторе; стороннему коду рекомендуется вместо этого использовать API [`io`](https://python-all.ru/3.7/library/io.html#module-io).1011#### `PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)`1213*Возвращаемое значение: новая ссылка.*1415Создаёт объект файла Python из файлового дескриптора уже открытого файла *fd*. Аргументы *name*, *encoding*, *errors* и *newline* могут быть `NULL` для использования значений по умолчанию; *buffering* может быть *-1* для использования значения по умолчанию. *name* игнорируется и сохранён для обратной совместимости. Возвращает `NULL` в случае неудачи. За более подробным описанием аргументов обратитесь к документации функции [`io.open()`](https://python-all.ru/3.7/library/io.html#io.open).1617> **Предупреждение**18>19> Поскольку потоки Python имеют собственный уровень буферизации, их смешивание с файловыми дескрипторами ОС может вызвать различные проблемы (например, непредсказуемый порядок данных).2021Изменено в версии 3.2: Игнорируется атрибут *name*.2223#### `int PyObject_AsFileDescriptor(PyObject *p)`2425Возвращает файловый дескриптор, связанный с *p*, в виде `int`. Если объект является целым числом, возвращается его значение. Если нет, вызывается метод [`fileno()`](https://python-all.ru/3.7/library/io.html#io.IOBase.fileno) объекта, если он существует; метод должен вернуть целое число, которое и будет значением файлового дескриптора. В случае ошибки устанавливает исключение и возвращает `-1`.2627#### `PyObject* PyFile_GetLine(PyObject *p, int n)`2829*Возвращаемое значение: новая ссылка.*3031Эквивалентно `p.readline([n])`; эта функция читает одну строку из объекта *p*. *p* может быть файловым объектом или любым объектом с методом [`readline()`](https://python-all.ru/3.7/library/io.html#io.IOBase.readline). Если *n* равно `0`, читается ровно одна строка независимо от её длины. Если *n* больше `0`, из файла будет прочитано не более *n* байт; может быть возвращена неполная строка. В обоих случаях возвращается пустая строка, если конец файла достигнут сразу. Однако, если *n* меньше `0`, читается одна строка независимо от длины, но при немедленном достижении конца файла возбуждается [`EOFError`](https://python-all.ru/3.7/library/exceptions.html#EOFError).3233#### `int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)`3435Записывает объект *obj* в файловый объект *p*. Единственный поддерживаемый флаг для *flags* – это `Py_PRINT_RAW`; если он указан, записывается [`str()`](https://python-all.ru/3.7/library/stdtypes.html#str) объекта вместо [`repr()`](https://python-all.ru/3.7/library/functions.html#repr). Возвращает `0` при успехе или `-1` при ошибке; устанавливается соответствующее исключение.3637#### `int PyFile_WriteString(const char *s, PyObject *p)`3839Записывает строку *s* в файловый объект *p*. Возвращает `0` при успехе или `-1` при ошибке; будет установлено соответствующее исключение.40