Мой вопрос заключается в том, как проанализировать вывод с разделителями табуляции из функции C в pandas DataFrame через ctypes:
Я пишу оболочку Python в Python3.x вокруг библиотеки C, используя ctypes.В настоящее время библиотека C выполняет запросы к базе данных.Функция C, к которой я обращаюсь return_query()
, возвращает строки запроса, разделенные табуляцией, с учетом пути к файлу, индекса и строки запроса:
int return_query(structname **output, const char *input_file,
const char *index, const char *query_string);
Как видите, я 'используя output
в качестве места для хранения всех записей из запроса, при этом structname
является структурой для строк
У меня также есть функция, которая печатает в STDOUT:
int print_query(const char *input_file,
const char *index, const char *query_string);
Моя цель - получить доступ к этим функциям через ctypes и передать выходные строки с разделителями табуляции в DataFrame pandas.
Моя проблема заключается в следующем:
(1) я мог бы попытаться проанализировать STDOUT print_query()
;однако эти запросы могут привести к большим разделенным табуляцией DataFrames.Я беспокоюсь, что это решение неэффективно, так как оно может не масштабироваться до + 10000 строк.Другие вопросы примерно касались того, как перехватывать STDOUT из функций C в Python через ctypes:
Получение вывода на печать из общей библиотеки, вызываемой из python, с помощью модуля ctypes
(2)Могу ли я как-нибудь получить доступ к output
и передать его в DataFrame панды?В настоящее время я не уверен, как это будет работать, например,
import ctypes
lib = CDLL("../libshared.so") ### reference to shared library, *.so
lib.return_query.restype = ctypes.c_char
lib.return_query.argtypes = (???, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p)
Каким должен быть первый аргумент, и как бы я передал его в нечто, что может быть пандой DataFrame?
(3) Возможно, было бы лучше переписать функции C, которые возвращают строки с разделителями табуляции в нечто более доступное через ctypes?