如何提高此Python代码的效率
我在ABAQUS PDE中编写了一个简单的代码,用于将结果导出到csv文件。我把它的一部分放在这里,我想知道如何提高它的效率 非常感谢你的宝贵意见如何提高此Python代码的效率,python,csv,Python,Csv,我在ABAQUS PDE中编写了一个简单的代码,用于将结果导出到csv文件。我把它的一部分放在这里,我想知道如何提高它的效率 非常感谢你的宝贵意见 from odbAccess import * from abaqusConstants import * outputname='job-23.odb' odb=openOdb(outputname) myAssembly=odb.rootAssembly % Defining number of elements nofl=46 s1
from odbAccess import *
from abaqusConstants import *
outputname='job-23.odb'
odb=openOdb(outputname)
myAssembly=odb.rootAssembly
% Defining number of elements
nofl=46
s1=open('s1.csv','w')
%Defining lenght of steps
lengthsteps=len(odb.steps.keys())
for j in range(nofl):
for i in range(lengthsteps-1):
step=odb.steps.keys()[i]
s=odb.steps[step]
jj=odb.steps[opstep].historyRegions.keys()[j]
sdata=s.historyRegions[jj].historyOutputs['S11'].data
l=len(sdata)
for k in range(l-1):
s1.write('%10.4E\n' % sdata[k][1])
s1.close()
您不应该在python中使用的东西是:
objectNr = len(myObjects)
for i in range(objectNr-1):
a = myObjects[i]
print a
这样做会更好:
for myObject in myObjects:
print myObject
在您的情况下,当您在odb步骤上进行iter时,可能会更容易
for step in odb.steps:
s=odb.steps[step]
...
要短得多,阅读起来更好,这是python的方式 您不应该在python中使用的东西是:
objectNr = len(myObjects)
for i in range(objectNr-1):
a = myObjects[i]
print a
这样做会更好:
for myObject in myObjects:
print myObject
在您的情况下,当您在odb步骤上进行iter时,可能会更容易
for step in odb.steps:
s=odb.steps[step]
...
要短得多,阅读起来更好,这是python的方式 有一些简单的方法可以改进代码,但我不确定性能会有多大变化。你以前做过一些浪费的事情,但我不认为这是非常昂贵的事情 最大的变化是避免使用
keys()
调用和整数索引来获取字典键。相反,我们只是直接访问值()。由于您当前的代码写出交错的数据(例如,按步骤分组,而不是按项分组),因此我们将现有的嵌套结构(生成器表达式中的列表)转换为zip(*(…)
有一些简单的方法可以改进代码,但我不确定性能会有多大变化。你以前做过一些浪费的事情,但我不认为这是非常昂贵的事情
最大的变化是避免使用keys()
调用和整数索引来获取字典键。相反,我们只是直接访问值()。由于您当前的代码写出交错的数据(例如,按步骤分组,而不是按项分组),因此我们将现有的嵌套结构(生成器表达式中的列表)转换为zip(*(…)
您是否有意省略最后一步?在将其移植到另一种语言之前,请先进行分析。例如,使用lineprofiler:可能这是针对的。您是否有意省略最后一步?在您将其移植到另一种语言之前,请先进行分析。例如,使用lineprofiler:也许这是一种适合用户的功能。