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

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

ファイルオブジェクト

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の新機能。

PyObject *PyFile_GetLine(PyObject *p, int n)
p.readline([n])と同等のこの関数は、オブジェクト p から1行を読み取ります。 p は、ファイルオブジェクト、または readline()メソッドを持つ任意のオブジェクトです。 n0の場合、行の長さに関係なく、正確に1行が読み取られます。 n0より大きい場合、ファイルから読み取られるのは n バイト以下です。 部分的な行を返すことができます。 どちらの場合も、ファイルの終わりにすぐに到達すると、空の文字列が返されます。 ただし、 n0より小さい場合、長さに関係なく1行が読み取られますが、ファイルの終わりにすぐに達すると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)
この関数は、インタプリタが内部で使用するために存在します。 psoftspace属性を newflag に設定し、前の値を返します。 p は、この関数が正しく機能するためにファイルオブジェクトである必要はありません。 すべてのオブジェクトがサポートされています(softspace属性を設定できる場合にのみ興味深いと考えられます)。 この関数はエラーをクリアし、属性が存在しない場合、または属性の取得中にエラーが発生した場合、前の値として0を返します。 この関数からエラーを検出する方法はありませんが、そうする必要はありません。
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を返します。 適切な例外が設定されます。