Объекты файлов¶File Objects
Эти API представляют собой минимальную эмуляцию C API Python 2 для встроенных файловых объектов, которые раньше полагались на поддержку буферизованного ввода-вывода (FILE*) из стандартной библиотеки C. В Python 3 файлы и потоки используют новый модуль io, который определяет несколько уровней поверх низкоуровневого небуферизованного ввода-вывода операционной системы. Описанные ниже функции – это удобные C-обёртки над этими новыми API, предназначенные в основном для внутреннего сообщения об ошибках в интерпретаторе; стороннему коду рекомендуется вместо этого использовать API io.
- PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *errors, char *newline, int closefd)¶
Создаёт объект файла Python по файловому дескриптору уже открытого файла fd. Аргументы name, encoding, errors и newline могут быть равны NULL для использования значений по умолчанию; buffering может быть -1 для использования значения по умолчанию. name игнорируется и сохранён для обратной совместимости. Возвращает NULL при ошибке. За более подробным описанием аргументов обращайтесь к документации функции io.open().
Предупреждение
Поскольку потоки Python имеют собственный уровень буферизации, их смешивание с файловыми дескрипторами ОС может вызвать различные проблемы (например, непредсказуемый порядок данных).
Изменено в версии 3.2: Атрибут name игнорируется.
- int PyObject_AsFileDescriptor(PyObject *p)¶
Возвращает файловый дескриптор, связанный с p, в виде int. Если объект является целым числом, возвращается его значение. Если нет, вызывается метод fileno() объекта, если он существует; метод должен вернуть целое число, которое возвращается в качестве значения файлового дескриптора. Устанавливает исключение и возвращает -1 в случае неудачи.
- PyObject* PyFile_GetLine(PyObject *p, int n)¶
- Возвращаемое значение: новая ссылка.
Эквивалентно p.readline([n]): эта функция читает одну строку из объекта p. p может быть файловым объектом или любым объектом, имеющим метод readline(). Если n равно 0, читается ровно одна строка независимо от длины строки. Если n больше 0, из файла будет прочитано не более n байт; может быть возвращена частичная строка. В обоих случаях возвращается пустая строка, если конец файла достигнут сразу. Если n меньше 0, однако читается одна строка независимо от длины, но возбуждается исключение EOFError, если конец файла достигнут сразу.
- int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)¶
Записывает объект obj в файловый объект p. Единственный поддерживаемый флаг для flags – Py_PRINT_RAW; если он задан, записывается str() объекта вместо repr(). Возвращает 0 при успехе или -1 при ошибке; будет установлено соответствующее исключение.