我有以下代码:
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()
答案 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”之间找到的字符串列表
我希望那是你想要做的。 干杯