2013-05-16 4 views
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' 

, 그것은 외부 프로그램의 파이썬 interpeter 매우 느린 (분)를 실행합니다 (여기 스크립트를 실행해야 이 프로그램에 의해 생성 된 결과의 데이터베이스). 어떻게 최적화 할 수 있습니까?

편집 : 나는 코드의 끝에서 inputFile을 닫습니다 inputFile.close()

+0

은'....'에 무엇입니까? – Patashu

+1

파일의 크기는 얼마나됩니까? 파일을 읽은 다음 파일을 올바르게 닫으시겠습니까? – jozzas

+0

@Patashu, jozzas : 질문이 편집되었습니다. – jpcgandre

답변

1

은 어쩌면 당신은 정규 표현식의 라인을 따라 생각할 수 :

나는 바로 그것을 이해한다면, 당신은 데이터를 얻으려면 일부 파일에서 키워드 * 노드와 * 요소 사이에, 맞습니까? 나는 그였다 바란다 "* 요소"

을 "* 노드"당신에게 태그 사이에서 발견되는 문자열 목록을 제공해야하고

import re 

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

:

아니라 당신이 뭔가를 시도 할 수 네가하려는 일. 건배

3

잘 이해하면 처음에는 파일을 한 줄씩 저장 한 다음 "* 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)