文件對象?
這些 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, errors 和 newline 可以為
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()方法的任何對象。 如果 n 是0,則無論該行的長度如何,都會讀取一行。 如果 n 大于``0``,則從文件中讀取不超過 n 個字節;可以返回行的一部分。 在這兩種情況下,如果立即到達文件末尾,則返回空字符串。 但是,如果 n 小于0,則無論長度如何都會讀取一行,但是如果立即到達文件末尾,則引發EOFError。
