0

次のコードがあります。

    inputFile = open('C:/Abaqus_JOBS' + JobDir + '/' + JobName + '-3_4.inp', 'r')
    for line in inputFile:
        fileData.append([x.strip() for x in line.split(',')])

    fel=0
    for row,data in enumerate(fileData):
        if data[0]=='*Node':
            row_nodes = row #number of the row when data='*Node'
         if data[0]=='*Element' and fel==0:
            row_elements2 = row
            fel=1

    for row,data in enumerate(fileData[row_nodes + 1:row_elements2]):
        nodes.append(data) #data between '*Nodes' and '*Element'

ただし、外部プログラムの python インターピーターでは非常に遅く (数分) 実行されます (このプログラムによって生成された結果のデータベースにアクセスする必要があるため、ここでスクリプトを実行する必要があります)。どうすれば最適化できますか?

編集:inputFileコードの最後で閉じます:inputFile.close()

4

2 に答える 2

3

私がよく理解していれば、最初にファイルを1行ずつ保存し、次に最初に出現する「* Element」と最後に出現する「* Node」を検索し、最後にそれらの間にあるものを保存します。

私が見る最適化は、ファイルの 3 つの解析から単一の解析に移行できることです。

inputFile = open('C:/Abaqus_JOBS' + JobDir + '/' + JobName + '-3_4.inp', 'r')

go_storage = False
nodes = None

for line in inputFile:
    if line[0] == "*Node":
        # Reset what has already been memorized
        nodes = list()
        go_storage = True
    elif line[0] == "*Element":
        break
    elif go_storage:
        nodes.append(line) 
于 2013-05-16T09:14:01.440 に答える
1

たぶん、正規表現に沿って考えることができます:

私の理解が正しければ、ファイル内のキーワード *Node と *Element の間のデータを取得する必要がありますよね?

あなたは次のようなものを試すことができます:

import re

S = open('C:/Abaqus_JOBS' + JobDir + '/' + JobName + '-3_4.inp','r').read() 
Data =  re.finditer( "\*Nonde([.\n]*?)\*Element", S )

タグ「*Node」と「*Elements」の間にある文字列のリストが表示されます。

それがあなたがやろうとしていたことだと思います。乾杯

于 2013-05-16T07:17:22.177 に答える