我正在写一个小的python脚本,从dir中的几个.c文件中读取参数及其值。参数通常采用以下格式:
uint8 param1 = 1;
sint8 param2 = 2;
然而,有时它们看起来是这样的:
param3 = {
1, 2, 3,
4, 5, 6
};
甚至:
param4 = {
1, 2, 3,
{
4, 5, 6
},
};
正如您在涉及param3 and param4
的情况中所怀疑的,行将是param3 = {
,对于param4
也是一样的,因此不包含任何实际值。我想我应该在调用值获取方法之前先解决它,在一行中搜索“{”,如果找到了它,那么在包含“{”的行下面的行中找到“;”的下一次迭代,在任何换行之间,制表符和空格都应该被删除。
这是我希望该方法在正确运行时显示的输出。你知道吗
param3 = {1,2,3,4,5,6};
param4 = {1,2,3,{4,5,6},};
这就是我正在使用的布局,formatFile(line)
正是我需要帮助的方法。你知道吗
for root, dirs, files in os.walk(PATH_DST_SOURCE):
for file in files:
if file.endswith('.c'):
with open(os.path.join(root, file), 'r') as this:
for line in this:
formatFile(line)
不幸的是,我不知道如何做到这一点,并希望得到一些帮助,甚至推动在正确的方向。当然,如果有更好的方法来解决我的问题,那么这些也是受欢迎的!你知道吗
您可以这样尝试:拥有一个语句列表和一个包含当前语句的字符串;添加到当前语句,直到它以
;
结尾,然后将它添加到语句列表中。你知道吗当然,这是假设每个以
;
结尾的语句实际上都在行的末尾,而不是,例如,后跟一个行注释或另一个语句的一部分。如果您还想处理这些情况,事情会变得更加复杂(像代码在行注释或块注释中的语句,或字符串中的语句等等),您可能应该查找一些现有的解析器库。你知道吗提出完全不同的解决方案。。。想一想……
将C文件解析为字符串通常是一项非常繁琐的工作,很容易出错。您可以尝试使用一些正则表达式,但通常您会发现自己会说:
如果你想构建健壮的代码,不要自己解析代码。。。试着找些能帮你的东西。 举个例子,我会尝试使用Swig接口访问C文件,然后直接访问变量。你知道吗
一般文件:http://www.swig.org/Doc1.3/Python.html
访问全局变量:http://www.swig.org/Doc1.3/Python.html#Python_nn16
如果你能使用这个解决方案,你唯一要做的就是写几行小的接口文件,把它作为Swig软件的输入,这将为你生成一个python模块,包装你的C文件。你知道吗
编辑:
在你的情况下,你可以这么做:
1.安装Swig 2.创建一个文件myInterface.i,如下所示:
运行命令
swig -python myInterface.i
这将为您的头文件生成一个python包装器。在Python脚本中导入这个文件,并直接从头文件访问变量。
我不记得该怎么做阵列,但他们肯定也可以访问!你知道吗
你可以尝试一种简单的方法(不必逐行阅读):
相关问题 更多 >
编程相关推荐