File I / O en el API Python 3 C
-
23-08-2019 - |
Pregunta
La API de C en Python 3.0 ha cambiado (en desuso) muchas de las funciones de objetos de fichero.
Antes, en 2.X, podría utilizar
PyObject* PyFile_FromString(char *filename, char *mode)
para crear un objeto de archivo de Python, por ejemplo:
PyObject *myFile = PyFile_FromString("test.txt", "r");
... pero dicha función ya no existe en Python 3.0. ¿Cuál sería el Python 3.0 equivalente a tal llamada?
Solución
Puede hacerlo de la vieja (nuevo?) - usanza, con sólo llamar al módulo io
.Este código funciona, pero lo hace sin la comprobación de errores. Consulte la documentación para la explicación.
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();
Otros consejos
Esta página afirma que el API es:
PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *newline, int closefd);
No sé si eso significa que no es posible tener Python abrir el archivo desde el nombre del archivo, pero que debería ser trivial para hacer usted mismo, en C.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow