2013-05-16 278 views
0

我有以下代码:优化Python代码

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

也许你可以沿着正则表达式的行认为:

,如果我的理解对不对,你想要得到的数据在关键字* Node和* Element之间的某个文件中,对吗?

那么你可以尝试像:

import re 

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

这应该给你被发现在标签之间的字符串列表“*节点”和“*元素”

我希望那是你在做什么。 Cheers

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)