Pergunta

O API C em Python 3,0 mudou (preterido) muitas das funções de objectos de ficheiros.

Antes, em 2.x, você pode usar

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

para criar um objeto de arquivo Python, por exemplo:

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

... mas essa função não existe mais no Python 3.0. Qual seria o Python 3.0 equivalente à chamada?

Foi útil?

Solução

Você pode fazê-lo o velho (de novo?) -. Moda, por apenas chamando o io módulo

Este código funciona, mas não faz a verificação de erros. Veja a documentação para a explicação.

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();

Outras dicas

Esta página afirma que a API é:

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

Não tenho certeza se isso significa que não é possível ter Python abrir o ficheiro a partir do nome do arquivo, mas que deve ser trivial para fazer a si mesmo, em C.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top