ファイルオブジェクト—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/c-api/file
移動先:案内検索

ファイルオブジェクト

これらのAPIは、組み込みファイルオブジェクト用のPython 2 C APIの最小限のエミュレーションであり、C標準ライブラリからのバッファI / O( FILE * )サポートに依存していました。 Python 3では、ファイルとストリームは新しい io モジュールを使用します。このモジュールは、オペレーティングシステムの低レベルのバッファーなしI / O上にいくつかのレイヤーを定義します。 以下で説明する関数は、これらの新しいAPIの便利なCラッパーであり、主にインタープリターでの内部エラー報告を目的としています。 代わりに、 io APIにアクセスすることをお勧めします。

PyObject *PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)

すでに開いているファイル fd のファイル記述子からPythonファイルオブジェクトを作成します。 引数 nameencodingerrors 、および newline は、デフォルトを使用するためにNULLにすることができます。 バッファリングは、デフォルトを使用するために -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)
p.readline([n])と同等のこの関数は、オブジェクト p から1行を読み取ります。 p は、ファイルオブジェクト、または readline()メソッドを持つ任意のオブジェクトです。 n0の場合、行の長さに関係なく、正確に1行が読み取られます。 n0より大きい場合、ファイルから読み取られるのは n バイト以下です。 部分的な行を返すことができます。 どちらの場合も、ファイルの終わりにすぐに到達すると、空の文字列が返されます。 ただし、 n0より小さい場合、長さに関係なく1行が読み取られますが、ファイルの終わりにすぐに達すると EOFError が発生します。
int PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction handler)

io.open_code()の通常の動作をオーバーライドして、提供されたハンドラーを介してパラメーターを渡します。

ハンドラーはタイプ PyObject *(*)(PyObject * path、void * userData)の関数です。ここで、 pathPyUnicodeObject であることが保証されています。

userData ポインターがフック関数に渡されます。 フック関数は異なるランタイムから呼び出される可能性があるため、このポインターはPythonの状態を直接参照しないでください。

このフックはインポート中に意図的に使用されるため、sys.modulesでフリーズまたは使用可能であることがわかっている場合を除き、実行中に新しいモジュールをインポートしないでください。

フックが設定されると、それを削除または置換することはできず、後で PyFile_SetOpenCodeHook()の呼び出しは失敗します。 失敗すると、関数は-1を返し、インタープリターが初期化されている場合は例外を設定します。

この関数は、 Py_Initialize()の前に安全に呼び出すことができます。

バージョン3.8の新機能。

int PyFile_WriteObject(PyObject *obj, PyObject *p, int flags)
オブジェクト obj をファイルオブジェクト p に書き込みます。 flags でサポートされているフラグはPy_PRINT_RAWのみです。 指定した場合、 repr()の代わりに、オブジェクトの str()が書き込まれます。 成功した場合は0を返し、失敗した場合は-1を返します。 適切な例外が設定されます。
int PyFile_WriteString(const char *s, PyObject *p)
文字列 s をファイルオブジェクト p に書き込みます。 成功した場合は0を返し、失敗した場合は-1を返します。 適切な例外が設定されます。