优化python代码

优化python代码,python,optimization,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]=

我有以下代码:

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

编辑:
我在代码末尾关闭
inputFile
inputFile.close()

也许您可以按照正则表达式的思路思考:

如果我理解正确的话,您希望获取某个文件中关键字*节点和*元素之间的数据,对吗

嗯,你可以试试这样:

import re

S = open('C:/Abaqus_JOBS' + JobDir + '/' + JobName + '-3_4.inp','r').read() 
Data =  re.finditer( "\*Nonde([.\n]*?)\*Element", S )
这将为您提供在标记“*Node”和“*Elements”之间找到的字符串列表

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

也许你可以按照正则表达式的思路思考:

如果我理解正确的话,您希望获取某个文件中关键字*节点和*元素之间的数据,对吗

嗯,你可以试试这样:

import re

S = open('C:/Abaqus_JOBS' + JobDir + '/' + JobName + '-3_4.inp','r').read() 
Data =  re.finditer( "\*Nonde([.\n]*?)\*Element", S )
这将为您提供在标记“*Node”和“*Elements”之间找到的字符串列表

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

如果我理解得很好,首先逐行存储文件,然后搜索第一次出现的“*元素”和最后出现的“*节点”,最后存储它们之间的内容

我看到的一个优化是,您可以从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) 

如果我理解得很好,首先逐行存储文件,然后搜索第一次出现的“*元素”和最后一次出现的“*节点”,最后存储它们之间的内容

我看到的一个优化是,您可以从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) 

中有什么?文件有多大?你确定你在读完文件后是否正确地关闭了文件?@ Patashu,JoZas:问题编辑。你是被迫用Python写的,还是你能用更快的语言写它?@ PATASU:我可以用C++写…但是我必须学习它。
?文件有多大?你确定你在读完文件后是否正确地关闭了文件?@ Patashu,JoZas:问题编辑。你是被迫用Python写的,还是你能用更快的语言写它?@ PATASU:我可以用C++写…但我必须学会。