《abaqusPython实例-操作excel文件.pdf》由会员分享,可在线阅读,更多相关《abaqusPython实例-操作excel文件.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、abaqus Python实例 操作 excel文件目前处理数据离不开excel,所以 pythoner 必须学会用python 操作 excel 表格。Python与 excel 交互方法也比较多,我一开始就接触的xlrd/xlwt包。直到现在也没有发现什么bug或者缺点,而且上次从ujs505 那里知道Win32Com 的方法在64bit 系统下无效了,但是xlrd/xlwt 方法依然好用,我欣喜万分。这里给出我一个从材料单轴拉伸数据TRA 文件中处理得到拉伸过程中各种应力应变量并记录到 excel 中的例子,其实这个例子比较乱,但是实在没有时间给弄个明了的版本了。大家将就看看from m
2、ath import*import sys import re import xlrd from xlwt import Workbook book=Workbook()sheet=book.add_sheet(test_NT,cell_overwrite_ok=True)sheet1=book.add_sheet(engineer,cell_overwrite_ok=True)sheet2=book.add_sheet(True,cell_overwrite_ok=True)sheet3=book.add_sheet(Plastic,cell_overwrite_ok=True)sheet4
3、=book.add_sheet(Plastic_modify,cell_overwrite_ok=True)total_nubmer=46 nclown=0 nclown_e=0 nclown_t=0 nclown_p=0 nclown_pm=0 for i in range(total_nubmer):myfile=tensile-+str(i+1)f=open(myfile+.TRA,r)engineer_strain=true_strain=engineer_stress=true_stress=plastic_strain=test_force=s1=f.readline()s2=f.
4、readline()s3=f.readline()s4=f.readline()s1=re.sub(|t|;|n,s1)s1=re.split(+,s1)name=s12 little=name-2:s2=re.sub(|t|;|n,s2)s2=re.split(+,s2)times=s22 print name+run+str(times)bk=xlrd.open_workbook(Static report.xls)sh=bk.sheet_by_name(Stat)diameter=sh.cell_value(i+2,4)area=pi*(diameter)*2)/4 E_modulus=
5、sh.cell_value(i+2,7)state=True s0=f.readlines()s0=s0-2 s0=re.sub(;,s0)s0=re.split(+,s0)f.seek(0)s1=f.readline()s2=f.readline()s3=f.readline()s4=f.readline()while state:s=f.readline()s=re.sub(;,s)s=re.split(+,s)#print s#print s0 if(s=EOF)|(s=s0):state=False else:force=float(s1)eee=float(s0)/100.0 sss
6、=force/area test_force.append(force)engineer_strain.append(eee)engineer_stress.append(sss)true_strain.append(log(1.0+eee)true_stress.append(sss*(1.0+eee)plastic_strain.append(log(1.0+eee)-sss*(1.0+eee)/E_modulus)f.close()#3 simu_strain=simu_P_strain=simu_triax=simu_force=simu_E=204323.0 simu_little=
7、str(int(little)+3)simu_name=New_pass+simu_little+test.dat print refer to+simu_name simu_f=open(simu_name,r)simu_state=True s0=simu_f.readlines()s0=s0-1 s0=re.sub(;,s0)s0=re.split(+,s0)#print s0 simu_f.seek(0)simu_s1=simu_f.readline()while simu_state:simu_s2=simu_f.readline()simu_s2=re.sub(;,simu_s2)
8、simu_s2=re.split(+,simu_s2)if(simu_s2=EOF)|(simu_s2=s0):simu_state=False else:#print simu_s2 s_force=float(simu_s25)s_eee=float(simu_s22)s_triax=float(simu_s23)s_sss=s_force/area simu_force.append(s_force)simu_triax.append(s_triax)simu_strain.append(s_eee)simu_P_strain.append(log(1.0+s_eee)-s_sss*(1
9、.0+s_eee)/simu_E)simu_f.close()#3 nrows=3 sheet.write(0,nclown,sample)sheet.write(0,nclown+2,name)sheet.write(1,nclown,area)sheet.write(1,nclown+2,area)sheet.write(1,nclown+1,diameter)sheet.write(1,nclown+3,E_modulus)sheet.write(1,nclown+4,E_modulus)sheet.write(2,nclown,E_strain)sheet.write(2,nclown
10、+1,E_stress)sheet.write(2,nclown+2,T_strain)sheet.write(2,nclown+3,T_stress)sheet.write(2,nclown+4,PL_strain)for i in range(len(engineer_strain):sheet.write(nrows,nclown,engineer_straini)sheet.write(nrows,nclown+1,engineer_stressi)sheet.write(nrows,nclown+2,true_straini)sheet.write(nrows,nclown+3,tr
11、ue_stressi)sheet.write(nrows,nclown+4,plastic_straini)nrows+=1 nclown+=5#output engineer strain and stress nrows=3 sheet1.write(0,nclown_e,file)sheet1.write(0,nclown_e+1,myfile)sheet1.write(0,nclown_e+2,E_modulus)sheet1.write(0,nclown_e+3,E_modulus)sheet1.write(1,nclown_e,sample)sheet1.write(1,nclow
12、n_e+1,name)sheet1.write(1,nclown_e+2,run)sheet1.write(1,nclown_e+3,times)sheet1.write(2,nclown_e,E_strain)sheet1.write(2,nclown_e+1,E_stress)for i in range(len(engineer_strain):sheet1.write(nrows,nclown_e,engineer_straini)sheet1.write(nrows,nclown_e+1,engineer_stressi)nrows+=1 nclown_e+=4#output tru
13、e strain and stress nrows=3 sheet2.write(0,nclown_t,file)sheet2.write(0,nclown_t+1,myfile)sheet2.write(0,nclown_t+2,E_modulus)sheet2.write(0,nclown_t+3,E_modulus)sheet2.write(1,nclown_t,sample)sheet2.write(1,nclown_t+1,name)sheet2.write(1,nclown_t+2,run)sheet2.write(1,nclown_t+3,times)sheet2.write(2
14、,nclown_t,T_strain)sheet2.write(2,nclown_t+1,T_stress)for i in range(len(engineer_strain):sheet2.write(nrows,nclown_t,true_straini)sheet2.write(nrows,nclown_t+1,true_stressi)nrows+=1 nclown_t+=4#output plastic strain and stress nrows=3 sheet3.write(0,nclown_p,file)sheet3.write(0,nclown_p+1,myfile)sh
15、eet3.write(0,nclown_p+2,E_modulus)sheet3.write(0,nclown_p+3,E_modulus)sheet3.write(1,nclown_p,sample)sheet3.write(1,nclown_p+1,name)sheet3.write(1,nclown_p+2,run)sheet3.write(1,nclown_p+3,times)sheet3.write(2,nclown_p,PL_strain)sheet3.write(2,nclown_p+1,T_stress)for i in range(len(engineer_strain):s
16、heet3.write(nrows,nclown_p,plastic_straini)sheet3.write(nrows,nclown_p+1,true_stressi)nrows+=1 nclown_p+=4#output modified plastic strain and true stress nrows=3 i_temp=1 sheet4.write(0,nclown_pm,file)sheet4.write(0,nclown_pm+1,myfile)sheet4.write(0,nclown_pm+2,E_modulus)sheet4.write(0,nclown_pm+3,E
17、_modulus)sheet4.write(1,nclown_pm,sample)sheet4.write(1,nclown_pm+1,name)sheet4.write(1,nclown_pm+2,run)sheet4.write(1,nclown_pm+3,times)sheet4.write(2,nclown_pm,PL_strain)sheet4.write(2,nclown_pm+1,Force)running=True for i in range(len(engineer_strain):if running:mincr=150 temp_e=(test_forcei-test_
18、forcei+mincr)/(plastic_straini-plastic_straini+mincr)if temp_e400000.0:i_temp=i running=False else:modifed_strain=engineer_straini-engineer_straini_temp modifed_plastic_strain=log(1.0+modifed_strain)-engineer_stressi*(1.0+modifed_strain)/E_modulus sheet4.write(nrows,nclown_pm,modifed_plastic_strain)
19、sheet4.write(nrows,nclown_pm+1,test_forcei)nrows+=1#output simulation result nrows=3 sheet4.write(2,nclown_pm+2,PL_strain)sheet4.write(2,nclown_pm+3,Force)sheet4.write(2,nclown_pm+4,TRIAX)for j in range(len(simu_P_strain):sheet4.write(nrows,nclown_pm+2,simu_P_strainj)sheet4.write(nrows,nclown_pm+3,s
20、imu_forcej)sheet4.write(nrows,nclown_pm+4,simu_triaxj)nrows+=1#next file(Test result)nclown_pm+=5 book.save(material_treat.xls)另一例子import csv from odbAccess import*from abaqusConstants import*filename=getInput(Please input the ODB file name)#下面这样都是我定义的字典或list,用来存保存提取数据的elementArea=elementConn=nodeAr
21、ea =timeTP =#下面可以看做一般的从odb 文件中提取结果的步骤#打开指定的odb 文件odb=openOdb(path=filename)#得到 assembly 中所有的instance inst=odb.rootAssembly.instances#或取第一个instance中的所有单元,因为我这个odb 里面只有一个instance#.keys()方法可以获得一个list有所有的instance名字elments=instinst.keys()0.elements#下面一段对单元循环,得到每个单元的几个结点,然后记录下来for el in elments:label=el.l
22、abel nodes=el.connectivity elementConnlabel=nodes#节点nodes=instinst.keys()0.nodes for nd in nodes:label=nd.label nodeArealabel=0#打开指定的step st=odb.stepsodb.steps.keys()0#对指定 step 的某个特定场变量做循环for v in st.frames-1.fieldOutputsEVOL.values:label=v.elementLabel data=v.data elementArealabel=data for k,v in e
23、lementArea.iteritems():nds=elementConnk for nd in nds:nodeAreand+=0.25*v#下面是提取每个frame 中每个节点的NT11值frames=st.frames for fr in frames:nt11=fr.fieldOutputsNT11.values time=fr.frameValue sumTp=0 sumAr=0 for va in nt11:label=va.nodeLabel data=va.data if data0:area=nodeArealabel sumTp+=data*area sumAr+=area try:mean=float(sumTp)/float(sumAr)timeTP.append(time,mean)except:print fr.frameId filename=getInput(pleae input the csv file n name to save)wr=csv.writer(file(filename,wb)#这个把结果写进csv 文件,只要一句,很简单,也可以在这一句之前写个表头wr.writerows(timeTP)
限制150内