Объекты файлов¶File Objects
Встроенные файловые объекты Python полностью реализованы на основе поддержки FILE* из стандартной библиотеки C. Это деталь реализации, которая может измениться в будущих версиях Python.
- PyTypeObject PyFile_Type¶
Этот экземпляр PyTypeObject представляет тип файла Python. Он доступен программам Python как file и types.FileType.
- int PyFile_Check(PyObject *p)¶
Возвращает true, если аргумент является PyFileObject или подтипом PyFileObject.
Изменено в версии 2.2: Теперь допускаются подтипы.
- int PyFile_CheckExact(PyObject *p)¶
Возвращает true, если аргумент является PyFileObject, но не подтипом PyFileObject.
Новое в версии 2.2.
- PyObject* PyFile_FromString(char *filename, char *mode)¶
- Возвращаемое значение: новая ссылка.
В случае успеха возвращает новый файловый объект, открытый для файла, заданного filename, с режимом файла, заданным mode, где mode имеет ту же семантику, что и стандартная функция C fopen(). В случае ошибки возвращает NULL.
- PyObject* PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE*))¶
- Возвращаемое значение: новая ссылка.
Создаёт новый PyFileObject из уже открытого стандартного указателя C файла fp. Функция close будет вызвана, когда файл должен быть закрыт. В случае ошибки возвращает NULL.
- FILE* PyFile_AsFile(PyObject *p)¶
Возвращает файловый объект, связанный с p, в виде FILE*.
Если вызывающий код когда-либо будет использовать возвращаемый объект FILE*, когда GIL освобождён, он также должен вызывать функции PyFile_IncUseCount() и PyFile_DecUseCount(), описанные ниже, по мере необходимости.
- void PyFile_IncUseCount(PyFileObject *p)¶
Увеличивает внутренний счётчик использования PyFileObject, чтобы указать, что базовый FILE* используется. Это предотвращает вызов Python'ом f_close() для него из другого потока. Вызывающие это должны вызывать PyFile_DecUseCount(), когда закончат работу с FILE*. В противном случае файловый объект никогда не будет закрыт Python'ом.
GIL должен быть захвачен при вызове этой функции.
Рекомендуется вызывать это после PyFile_AsFile(), непосредственно перед освобождением GIL.
Новое в версии 2.6.
- void PyFile_DecUseCount(PyFileObject *p)¶
Уменьшает внутренний член unlocked_count PyFileObject, чтобы указать, что вызывающий завершил собственное использование FILE*. Это может быть вызвано только для отмены предыдущего вызова PyFile_IncUseCount().
GIL должен быть захвачен при вызове этой функции.
Новое в версии 2.6.
- PyObject* PyFile_GetLine(PyObject *p n)¶
- Возвращаемое значение: новая ссылка.
Эта функция эквивалентна p.readline([n]) и читает одну строку из объекта p. p может быть файловым объектом или любым объектом, имеющим метод readline(). Если n равно 0, читается ровно одна строка, независимо от её длины. Если n больше 0, из файла будет прочитано не более n байт; может быть возвращена неполная строка. В обоих случаях возвращается пустая строка, если конец файла достигнут сразу. Однако если n меньше 0, читается одна строка независимо от длины, но если конец файла достигнут сразу, возбуждается EOFError.
- PyObject* PyFile_Name(PyObject *p)¶
- Возвращаемое значение: заимствованная ссылка.
Возвращает имя файла, указанного p, в виде строкового объекта.
- void PyFile_SetBufSize(PyFileObject *p, int n)¶
Доступно только в системах с setvbuf(). Это следует вызывать только сразу после создания файлового объекта.
- int PyFile_SetEncoding(PyFileObject *p, const char *enc)¶
Устанавливает кодировку файла для вывода Unicode в enc. Возвращает 1 в случае успеха и 0 в случае ошибки.
Новое в версии 2.3.
- int PyFile_SetEncodingAndErrors(PyFileObject *p, const char *enc, *errors)¶
Устанавливает кодировку файла для вывода Unicode в enc и режим обработки ошибок в err. Возвращает 1 в случае успеха и 0 в случае ошибки.
Новое в версии 2.6.
- int PyFile_SoftSpace(PyObject *p, int newflag)¶
Эта функция существует для внутреннего использования интерпретатором. Устанавливает атрибут softspace объекта p в значение newflag и возвращает предыдущее значение. Для корректной работы этой функции p не обязан быть файловым объектом; поддерживается любой объект (хотя это имеет смысл только если атрибут softspace может быть установлен). Эта функция очищает все ошибки и вернёт 0 в качестве предыдущего значения, если атрибут не существует или возникли ошибки при его получении. Из этой функции невозможно определить наличие ошибок, но это и не должно требоваться.
- int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)¶
Записывает объект obj в файловый объект p. Единственный поддерживаемый флаг для flags – Py_PRINT_RAW; если он задан, записывается str() объекта вместо repr(). Возвращает 0 при успехе или -1 при ошибке; будет установлено соответствующее исключение.