优化python代码

时间:2013-05-16 03:18:33

标签: python optimization

我有以下代码:

    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 interpeter中运行非常慢(分钟)(我必须在这里运行脚本,因为我需要访问由此程序生成的结果的数据库)。我该如何优化呢?

编辑: 我关闭了代码末尾的inputFileinputFile.close()

2 个答案:

答案 0 :(得分:3)

如果我理解的话,你首先逐行存储文件,然后搜索“* Element”的第一次出现以及“* Node”的最后一次出现,最后存储它们之间的内容。

我看到的优化是你可以从你的文件解析到单个文件:

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) 

答案 1 :(得分: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”之间找到的字符串列表

我希望那是你想要做的。 干杯