使用python

时间:2016-08-05 06:18:59

标签: python regex numpy nastran

我想做什么

我正在尝试使用python解析nastran文件的几何信息。我目前的尝试使用NumPy和正则表达式。快速读取数据并且结果是NumPy数组非常重要。

Nastran文件格式

nastran文件可能如下所示:

GRID           1        3268.616-30.0828749.8656    
GRID           2        3268.781  -3.-14749.8888
GRID           3        3422.488580.928382.49383
GRID           4        3422.488     10.-2.49383
...

我只对该文件的正确部分感兴趣。在那里,信息分别以8个字符的块存在,分别用于x,y和z坐标。上面坐标的常见表示是

3268.616, -30.0828, 749.8656    
3268.781,  -3.e-14, 749.8888
3422.488, 580.9283, 82.49383
3422.488,      10., -2.49383

到目前为止我尝试了什么

到目前为止,我尝试使用正则表达式和NumPy来避免各种python for循环在处理数据时尽可能快。将完整的文件读入内存并将其存储在我尝试的fContent变量中:

vertices = np.array(re.findall("^.{24}(.{8})(.{8})(.{8})", fContent, re.MULTILINE), dtype=float)

然而,这不符合-3.-14表达式。一个解决方案是使用.-遍历正则表达式和所有.e-的结果字符串元组,然后从字符串元组列表中创建NumPy数组。 (未在上面的代码中显示)。但是,我认为这种方法会很慢,因为它涉及到所有已发现的正则表达式元组的循环并执行替换。

我在找什么

我正在寻找任何快速读取数据的方法。我目前的希望是成功处理“-3.-14”问题的智能正则表达式。如果.-不在8个字符块的末尾,则正则表达式需要用.e-替换所有.个字符,而仅用替换 。到目前为止,我无法创建这样的正则表达式。但正如我所说,任何其他快速阅读数据的方式也非常受欢迎。

1 个答案:

答案 0 :(得分:0)

这样的事情会好吗?匹配.-并替换为.e-

正则表达式:(\.-)(?!(.{7})?$)

DEMO