2

我想做的事

我正在尝试使用 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”问题的智能正则表达式。正则表达式需要替换所有.-字符,.e-前提.不在 8 个字符块的末尾。到目前为止,我无法创建这样的正则表达式。但正如我所说,任何其他快速读取数据的方式也是非常受欢迎的。

4

1 回答 1

0

像这样的东西可以正常工作吗?匹配.-并替换为.e-

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

演示

于 2016-08-05T06:33:50.273 回答