文件对象 — Python 文档
文件对象
Python 的内置文件对象完全在 C 标准库的 FILE*
支持上实现。 这是一个实现细节,可能会在 Python 的未来版本中发生变化。
- type PyFileObject
- PyObject 的这个子类型代表一个 Python 文件对象。
- PyTypeObject PyFile_Type
- PyTypeObject 的这个实例表示 Python 文件类型。 这以
file
和types.FileType
的形式暴露给 Python 程序。
- int PyFile_Check(PyObject *p)
如果其参数是 PyFileObject 或 PyFileObject 的子类型,则返回 true。
在 2.2 版更改:允许接受子类型。
- int PyFile_CheckExact(PyObject *p)
如果其参数是 PyFileObject,但不是 PyFileObject 的子类型,则返回 true。
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*))
- 从已经打开的标准 C 文件指针 fp 创建一个新的 PyFileObject。 当文件应该关闭时,函数 close 将被调用。 返回 NULL 并在失败时使用 close 关闭文件。 close 是可选的,可以设置为 NULL。
- FILE* PyFile_AsFile(PyObject \*p)
将与 p 关联的文件对象作为
FILE*
返回。如果调用者在释放 GIL 时将使用返回的
FILE*
对象,则它还必须适当地调用下面描述的PyFile_IncUseCount()
和PyFile_DecUseCount()
函数。
- void PyFile_IncUseCount(PyFileObject \*p)
增加 PyFileObject 的内部使用计数以指示正在使用底层
FILE*
。 这可以防止 Python 从另一个线程调用 f_close() 。 调用者在完成FILE*
后必须调用PyFile_DecUseCount()
。 否则文件对象永远不会被 Python 关闭。GIL 必须在调用此函数时保持。
建议的用法是在
PyFile_AsFile()
之后和释放 GIL 之前调用它:FILE *fp = PyFile_AsFile(p); PyFile_IncUseCount(p); /* ... */ Py_BEGIN_ALLOW_THREADS do_something(fp); Py_END_ALLOW_THREADS /* ... */ PyFile_DecUseCount(p);
2.6 版中的新功能。
- void PyFile_DecUseCount(PyFileObject \*p)
减少 PyFileObject 的内部 unlocked_count 成员,以指示调用者完成了对
FILE*
的使用。 这只能被调用以撤消先前对PyFile_IncUseCount()
的调用。调用此函数时必须保持 GIL(参见上面的示例)。
2.6 版中的新功能。
- 相当于
p.readline([n])
,该函数从对象p读取一行。 p 可以是文件对象或任何具有 readline() 方法的对象。 如果 n 是0
,则无论行的长度如何,都只读取一行。 如果n大于0
,则从文件中读取不超过n个字节; 可以返回部分行。 在这两种情况下,如果立即到达文件末尾,则返回空字符串。 但是,如果 n 小于0
,则无论长度如何都读取一行,但如果立即到达文件末尾,则会引发EOFError
。
- 将 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)
- 此函数存在供解释器内部使用。 将p的
softspace
属性设置为newflag并返回之前的值。 p 不必是该函数正常工作的文件对象; 支持任何对象(认为只有在可以设置softspace
属性时才有趣)。 此函数清除所有错误,如果该属性不存在或检索时出错,则返回0
作为先前值。 没有办法从这个函数中检测错误,但应该不需要这样做。
- 将对象 obj 写入文件对象 p。 flags 唯一支持的标志是
Py_PRINT_RAW
; 如果给定,则写入对象的 str() 而不是 repr()。 成功返回0
,失败返回-1
; 将设置适当的例外。
- int PyFile_WriteString(const char *s, PyObject *p)
- 将字符串 s 写入文件对象 p。 成功返回
0
,失败返回-1
; 将设置适当的例外。