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
...

ファイルの右側の部分だけに興味があります。そこには、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 文字ブロックの末尾にない場合に限ります。.今まで、このような正規表現を作成できませんでした。しかし、私が言ったように、データを読み取る他の高速な方法も大歓迎です。

4

1 に答える 1

0

このようなものはうまくいきますか?を一致させ.-て に置き換え.e-ます。

正規表現:(\.-)(?!(.{7})?$)

デモ

于 2016-08-05T06:33:50.273 に答える