我正在尝试使用python解析nastran文件的几何信息。我目前的尝试使用NumPy和正则表达式。快速读取数据并且结果是NumPy数组非常重要。
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-
替换所有.
个字符,而仅用替换 。到目前为止,我无法创建这样的正则表达式。但正如我所说,任何其他快速阅读数据的方式也非常受欢迎。