python - Python ctypes:如何将 C 函数的行输出传递到 pandas DataFrame?
问题描述
我的问题是如何通过 ctypes 将来自 C 函数的制表符分隔输出解析为 pandas DataFrame:
我正在使用 ctypes 围绕 C 库在 Python3.x 中编写 Python 包装器。C 库当前执行数据库查询。return_query()
给定文件的路径、索引和查询字符串,我正在访问的 C 函数从查询返回制表符分隔的行:
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 访问这些函数,并将制表符分隔的行输出传递到 pandas DataFrame。
我的问题是这样的:
(1)我可以尝试解析的STDOUT print_query()
;但是,这些查询可能会导致大的制表符分隔的 DataFrame。我担心这个解决方案效率不高,因为它可能无法扩展到 +10000 行。其他问题大致涵盖了如何通过 ctypes 从 Python 中的 C 函数中捕获 STDOUT:
使用 ctypes 模块从 python 调用的共享库中捕获打印输出
(2) 我可以output
以某种方式访问,并将其传递给 pandas 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)
第一个参数应该是什么,我如何将它传递给可能是 pandas DataFrame 的东西?
(3) 也许最好将返回制表符分隔行的 C 函数重写为更易于通过 ctypes 访问的东西?
解决方案
我打算发表评论,但 stackoverflow 阻止了我。
1- 熊猫对象传递给像 PyObject * 这样的 c 函数,所以 lib.return_query.argtypes = ( c_types.c_void_p , 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,应该是 char * return_query
这些是评论和意见,不是完整的答案....
推荐阅读
- r - ggplot r:如何突出显示一年中的数据
- android - 如何在单按钮视图android中对齐两端(左和右)的两个文本
- php - phpMyAdmin配置存储未完全配置,部分扩展-Xammp-Version -7.3.8-0-VC15
- html - 将子 div 转换(保持其位置)到父 div 的大小
- boolean - 让 QnA 制造者回答“是”或“否”问题
- c# - 通过在 Visual Basic 运行时单击另一个按钮来更改按钮颜色?
- sapper - 使用环境变量
- bash - 为什么不能将变量的值传递到 /etc 目录中的文件中?
- python-3.x - 我想知道如何使用 assert 来保证列表列表中的所有元素都具有相同的长度
- c - 代码不会打印我想要的字符串输出,它只是重复一个单词