【发布时间】:2013-09-23 12:47:01
【问题描述】:
我有一个可能很简单的问题。我必须将一些python代码转换为c,而我对c的经验并不丰富。
我在 python 中循环读取一个文件,逐行读取它。如果该行中有某个标记,我必须将其拆分并将值读入一个 int 数组。然后将该数组用于进一步处理。这里给出了一个文件的例子:
Event 163
Time 29-05-2013, 11:41:45
TDC1.HEX_B 927532 1460340
TDC1.HEX_F -1
TDC1.HEX_x1 930080 1462311
TDC1.HEX_x2 929198 1462611
TDC1.HEX_y1 1462957
TDC1.HEX_y2 928628 1462151
TDC1.HEX_z1 929097
TDC1.HEX_z2 930314 1462992
TDC1.Trigger 1728347
errors 0 0 0 0
proc_time 40
%
Event 500
现在我的问题是我不知道每一行中会有多少整数。在 python 中,我可以这样做:
if 'TDC1.HEX_B' in line:
numbers_str = line.split()[1:] # use all the words except the first
B = [ float(x) for x in numbers_str ]
在此示例中,B 将是一个列表,其中长度对应于 numbers_str 中的数字计数。在 c 中是否有类似的可能性来分配一个足够长的数组?稍后在处理数据时,我必须遍历数组。我已阅读有关 malloc() 和 realloc() 的信息。他们有帮助吗?如果是这样,是否有很好的资源来阅读它们?我是否可能必须先读取该行,然后为该行中的整数数量分配一个数组?
【问题讨论】:
-
我建议在尝试编写 C 代码之前阅读一本关于 C 的书...您所问的内容在我看来就像基本的 C 编码。
-
@ErikAllik:多么无意义的评论!
-
还要考虑是否真的值得用 C 进行编码。也许有一种方法可以用 Python 脚本读取数据,然后将实际处理交给 C 以加快速度(因为,除非你在你的文件中有数千行,并且你需要执行它数千次,你不会从用 C 编码这部分获得任何好处;即使这样,它在 Python 中可能已经足够快了)。
-
现在我有 500 个文件,每个文件大约 2000 行,这就是我想切换到 c 的原因。我也在看 ctypes..
-
在我的机器上进行快速测试需要半秒钟才能读取 500 个这样的文件,共 2000 行。这不是减速,而且真的不值得玩弄 malloc/realloc 的痛苦,所以您可能要考虑在 Python 中执行 I/O,然后以二进制格式或数据库格式存储
B。然后,您可以找到一种方便的方法在您的 C 程序中读取B,该方法将执行实际的、缓慢的计算(“方便”意味着您提前知道B有多少个浮点数,例如,存储 @ 的长度987654326@ 也是)。