如何提高此Python代码的效率

如何提高此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

我在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=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:也许这是一种适合用户的功能。