سؤال

تم تغيير API C في Python 3.0 (إهانة) العديد من الوظائف لكائنات الملفات.

قبل، في 2.x، يمكنك استخدام

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

لإنشاء كائن ملف Python، على سبيل المثال:

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

... ولكن هذه الوظيفة لم تعد موجودة في بيثون 3.0. ماذا سيكون بيثون 3.0 ما يعادل هذه الدعوة؟

هل كانت مفيدة؟

المحلول

يمكنك أن تفعل ذلك القديم (الجديد؟) - طريقة الطراز، بمجرد استدعاء وحدة 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();

نصائح أخرى

هذه الصفحة مطالبات API هي:

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

لست متأكدا مما إذا كان هذا يعني أنه من الممكن أن يكون لديك Python فتح الملف من اسم الملف، ولكن يجب أن يكون ذلك تافيا للقيام بنفسك، في C.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top