10

Python 3.0 の C API は、ファイル オブジェクトの多くの関数を変更 (非推奨) しました。

以前は、2.X で使用できました

PyObject* PyFile_FromString(char *filename, char *mode)

Python ファイル オブジェクトを作成するには、次のようにします。

PyObject *myFile = PyFile_FromString("test.txt", "r");

...しかし、そのような関数は Python 3.0 には存在しません。そのような呼び出しに相当する Python 3.0 は何でしょうか?

4

2 に答える 2

9

ioモジュールを呼び出すだけで、昔ながらの方法でそれを行うことができます。

このコードは機能しますが、エラーチェックは行いません。説明については、ドキュメントを参照してください。

PyObject *ioMod, *openedFile;

PyGILState_STATE gilState = PyGILState_Ensure();

ioMod = PyImport_ImportModule("io");

openedFile = PyObject_CallMethod(ioMod, "open", "ss", "foo.txt", "wb");
Py_DECREF(ioMod);

PyObject_CallMethod(openedFile, "write", "y", "Written from Python C API!\n");
PyObject_CallMethod(openedFile, "flush", NULL);
PyObject_CallMethod(openedFile, "close", NULL);
Py_DECREF(openedFile);

PyGILState_Release(gilState);
Py_Finalize();
于 2009-05-23T05:21:37.050 に答える
4

このページでは、API は次のように主張されています。

PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *newline, int closefd);

それがPythonにファイル名からファイルを開くことができないことを意味するかどうかはわかりませんが、Cで自分で行うのは簡単なはずです.

于 2009-05-22T14:32:28.637 に答える