私がしたいこと
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
...
ファイルの右側の部分だけに興味があります。そこには、x、y、z 座標のそれぞれについて、8 文字のチャンクで情報が存在します。上記の座標の一般的な表現は次のようになります。
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 文字ブロックの末尾にない場合に限ります。.
今まで、このような正規表現を作成できませんでした。しかし、私が言ったように、データを読み取る他の高速な方法も大歓迎です。