文件對象?

這些 API 是內置文件對象的 Python 2 C API 的最小仿真,它過去依賴于C標準庫的緩沖 I/O( FILE* )支持。 在Python 3中,文件和流使用新的 io 模塊,該模塊在操作系統的低級無緩沖 I/O 上定義了幾個層。 下面描述的函數是針對這些新API的便捷 C 包裝器,主要用于解釋器中的內部錯誤報告;建議第三方代碼訪問 io API。

PyFile_FromFd(int?fd, const char?*name, const char?*mode, int?buffering, const char?*encoding, const char?*errors, const char?*newline, int?closefd)?
Return value: New reference.

根據已打開文件 fd 的文件描述符創建一個 Python 文件對象。 參數 name, encoding, errorsnewline 可以為 NULL 表示使用默認值;buffering 可以為 -1 表示使用默認值。 name 會被忽略僅保留用于向下兼容。 失敗時返回 NULL。 有關參數的更全面描述,請參閱 io.open() 函數的文檔。

警告

由于Python流具有自己的緩沖層,因此將它們與 OS 級文件描述符混合會產生各種問題(例如數據的意外排序)。

在 3.2 版更改: 忽略 name 屬性。

int PyObject_AsFileDescriptor(PyObject?*p)?

將與 p 關聯的文件描述器返回為 int 。 如果對象是整數,則返回其值。 如果沒有,則調用對象的 fileno() 方法(如果存在); 該方法必須返回一個整數,該整數作為文件描述器值返回。 設置異常并在失敗時返回 -1

PyObject* PyFile_GetLine(PyObject?*p, int?n)?
Return value: New reference.

等價于 p.readline([n]) ,這個函數從對象 p 中讀取一行。 p 可以是文件對象或具有 readline() 方法的任何對象。 如果 n0 ,則無論該行的長度如何,都會讀取一行。 如果 n 大于``0``,則從文件中讀取不超過 n 個字節;可以返回行的一部分。 在這兩種情況下,如果立即到達文件末尾,則返回空字符串。 但是,如果 n 小于 0 ,則無論長度如何都會讀取一行,但是如果立即到達文件末尾,則引發 EOFError

int PyFile_WriteObject(PyObject?*obj, PyObject?*p, int?flags)?

將對象 obj 寫入文件對象 pflags 唯一支持的標志是 Py_PRINT_RAW;如果給定,則寫入對象的 str() 而不是 repr()。成功時返回 0,失敗時返回 -1。 將設置適當的例外。

int PyFile_WriteString(const char?*s, PyObject?*p)?

將字符串 s 寫入文件對象 p。 成功返回 0 失敗返回 -1;將設定相應的異常。