我的问题是如何通过ctype将C函数中以制表符分隔的输出解析为pandas DataFrame:
我正在用Python3.x编写一个使用ctype的C库的Python包装器。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);我的目标是通过ctype访问这些函数,并将制表符分隔的行输出传递给pandas DataFrame。
我的问题是:
(1)我可以尝试解析print_query()的STDOUT;但是,这些查询可能导致大型制表符分隔的DataFrames。我担心这个解决方案效率不高,因为它可能无法扩展到+1000行。其他问题大致涵盖了如何通过ctype从Python中的C函数捕获STDOUT:
Capturing print output from shared library called from python with ctypes module
(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函数会更好,这些C函数将以制表符分隔的行返回到更容易通过ctype访问的内容?
发布于 2018-06-10 21:30:51
我本打算发表评论,但stackoverflow阻止了我。
1- (c_types.c_void_p,对象传递给像PyObject *这样的c函数,因此lib.return_query.argtypes = pandas ctypes.c_char_p,ctypes.c_char_p,ctypes.c_char_p)
2-如果返回制表符分隔的行,听起来更像ctypes.c_char_p,而不是lib.return_query.restype = ctypes.c_char。而你的函数int,应该是return_query * return_query
这些只是评论和观察,而不是完整的答案……
https://stackoverflow.com/questions/50777214
复制相似问题