如何提高Python代码的效率

时间:2015-09-02 10:15:15

标签: 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=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()

2 个答案:

答案 0 :(得分:0)

你应该 在python中使用的东西是:

objectNr = len(myObjects)
for i in range(objectNr-1):
  a = myObjects[i]
  print a

这样的事情会更好:

for myObject in myObjects:
   print myObject

在你的情况下,当你超过odb.steps时,它会更容易。

for step in odb.steps:
  s=odb.steps[step]
  ...

阅读时间要短得多,这就是python方式。

答案 1 :(得分:0)

有一些简单的方法可以改进您的代码,但我不确定性能会发生多大变化。你之前做过一些浪费的事情,但我认为这不是很贵的东西。

最大的变化是避免使用keys()调用和整数索引来获取字典键。相反,我们只是直接访问values()。由于您当前的代码将交错的数据写出来(例如按步骤分组,而不是按项目分组),我们将我们拥有的嵌套结构(生成器表达式中的列表)转换为zip(*(...))

with open('s1.csv','w') as s1:
    for item in zip(*(step.historyRegions.values() for step in steps.values()[:-1]))
        for step in item:
            for data in step:
                s1.write('%10.4E\n' % data[1])