-
Python实例——操作excel文件
目前处理数据离不开excel,所以pythoner必须学会用python操作excel表格。Python与excel交互方法也比较多,我一开始就接触的xlrd/xlwt包。直到现在也没有发现什么bug或者缺点,而且上次从ujs505那里知道Win32Com的方法在64bit系统下无效了,但是xlrd/xlwt方法依然好用,我欣喜万分。
这里给出我一个从材料单轴拉伸数据TRA文件中处理得到拉伸过程中各种应力应变量并记录到excel中的例子,其实这个例子比较乱,但是实在没有时间给弄个明了的版本了。大家将就看看
from math 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=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.readline()
s3=f.readline()
s4=f.readline()
s1=re.sub('"|\t|;|\n',' ',s1)
s1=re.split(' +',s1)
name=s1[2]
little=name[-2:]
s2=re.sub('"|\t|;|\n',' ',s2)
s2=re.split(' +',s2)
times=s2[2]
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=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(s[1])
eee=float(s[0])/100.0
sss=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=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)
simu_s2=re.split(' +',simu_s2)
if (simu_s2=="EOF")|(simu_s2==s0):
simu_state=False
else:
# print simu_s2
s_force=float(simu_s2[5])
s_eee=float(simu_s2[2])
s_triax=float(simu_s2[3])
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.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+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_strain[i])
sheet.write(nrows,nclown+1,engineer_stress[i])
sheet.write(nrows,nclown+2,true_strain[i])
sheet.write(nrows,nclown+3,true_stress[i])
sheet.write(nrows,nclown+4,plastic_strain[i])
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,nclown_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_strain[i])
sheet1.write(nrows,nclown_e+1,engineer_stress[i])
nrows+=1
nclown_e+=4
#output true 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,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_strain[i])
sheet2.write(nrows,nclown_t+1,true_stress[i])
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)
sheet3.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)):
sheet3.write(nrows,nclown_p,plastic_strain[i])
sheet3.write(nrows,nclown_p+1,true_stress[i])
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_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_force[i]-test_force[i+mincr])/(plastic_strain[i]-plastic_strain[i+mincr])
if temp_e>400000.0:
i_temp=i
running=False
else:
modifed_strain=engineer_strain[i]-engineer_strain[i_temp]
modifed_plastic_strain=log(1.0+modifed_strain)-engineer_stress[i]*(1.0+modifed_strain)/E_modulus
sheet4.write(nrows,nclown_pm,modifed_plastic_strain)
sheet4.write(nrows,nclown_pm+1,test_force[i])
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_strain[j])
sheet4.write(nrows,nclown_pm+3,simu_force[j])
sheet4.write(nrows,nclown_pm+4,simu_triax[j])
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={}
nodeArea ={}
timeTP =[]
#下面可以看做一般的从odb文件中提取结果的步骤
#打开指定的odb文件
odb=openOdb(path=filename)
#得到assembly中所有的instance
inst=odb.rootAssembly.instances
#或取第一个instance中的所有单元,因为我这个odb里面只有一个instance
#.keys()方法可以获得一个list有所有的instance名字
elments=inst[inst.keys()[0]].elements
#下面一段对单元循环,得到每个单元的几个结点,然后记录下来
for el in elments:
label=el.label
nodes=el.connectivity
elementConn[label]=nodes
#节点
nodes=inst[inst.keys()[0]].nodes
for nd in nodes:
label=nd.label
nodeArea[label]=0
#打开指定的step
st=odb.steps[odb.steps.keys()[0]]
#对指定step的某个特定场变量做循环
for v in st.frames[-1].fieldOutputs['EVOL'].values:
label=v.elementLabel
data =v.data
elementArea[label]=data
for k,v in elementArea.iteritems():
nds=elementConn[k]
for nd in nds:
nodeArea[nd]+=0.25*v
#下面是提取每个frame中每个节点的NT11值
frames=st.frames
for fr in frames:
nt11=fr.fieldOutputs['NT11'].values
time=fr.frameValue
sumTp=0
sumAr=0
for va in nt11:
label=va.nodeLabel
data=va.data
if data<0:
area=nodeArea[label]
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)
这里给出我一个从材料单轴拉伸数据TRA文件中处理得到拉伸过程中各种应力应变量并记录到excel中的例子,其实这个例子比较乱,但是实在没有时间给弄个明了的版本了。大家将就看看
from math 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=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.readline()
s3=f.readline()
s4=f.readline()
s1=re.sub('"|\t|;|\n',' ',s1)
s1=re.split(' +',s1)
name=s1[2]
little=name[-2:]
s2=re.sub('"|\t|;|\n',' ',s2)
s2=re.split(' +',s2)
times=s2[2]
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=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(s[1])
eee=float(s[0])/100.0
sss=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=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)
simu_s2=re.split(' +',simu_s2)
if (simu_s2=="EOF")|(simu_s2==s0):
simu_state=False
else:
# print simu_s2
s_force=float(simu_s2[5])
s_eee=float(simu_s2[2])
s_triax=float(simu_s2[3])
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.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+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_strain[i])
sheet.write(nrows,nclown+1,engineer_stress[i])
sheet.write(nrows,nclown+2,true_strain[i])
sheet.write(nrows,nclown+3,true_stress[i])
sheet.write(nrows,nclown+4,plastic_strain[i])
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,nclown_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_strain[i])
sheet1.write(nrows,nclown_e+1,engineer_stress[i])
nrows+=1
nclown_e+=4
#output true 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,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_strain[i])
sheet2.write(nrows,nclown_t+1,true_stress[i])
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)
sheet3.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)):
sheet3.write(nrows,nclown_p,plastic_strain[i])
sheet3.write(nrows,nclown_p+1,true_stress[i])
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_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_force[i]-test_force[i+mincr])/(plastic_strain[i]-plastic_strain[i+mincr])
if temp_e>400000.0:
i_temp=i
running=False
else:
modifed_strain=engineer_strain[i]-engineer_strain[i_temp]
modifed_plastic_strain=log(1.0+modifed_strain)-engineer_stress[i]*(1.0+modifed_strain)/E_modulus
sheet4.write(nrows,nclown_pm,modifed_plastic_strain)
sheet4.write(nrows,nclown_pm+1,test_force[i])
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_strain[j])
sheet4.write(nrows,nclown_pm+3,simu_force[j])
sheet4.write(nrows,nclown_pm+4,simu_triax[j])
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={}
nodeArea ={}
timeTP =[]
#下面可以看做一般的从odb文件中提取结果的步骤
#打开指定的odb文件
odb=openOdb(path=filename)
#得到assembly中所有的instance
inst=odb.rootAssembly.instances
#或取第一个instance中的所有单元,因为我这个odb里面只有一个instance
#.keys()方法可以获得一个list有所有的instance名字
elments=inst[inst.keys()[0]].elements
#下面一段对单元循环,得到每个单元的几个结点,然后记录下来
for el in elments:
label=el.label
nodes=el.connectivity
elementConn[label]=nodes
#节点
nodes=inst[inst.keys()[0]].nodes
for nd in nodes:
label=nd.label
nodeArea[label]=0
#打开指定的step
st=odb.steps[odb.steps.keys()[0]]
#对指定step的某个特定场变量做循环
for v in st.frames[-1].fieldOutputs['EVOL'].values:
label=v.elementLabel
data =v.data
elementArea[label]=data
for k,v in elementArea.iteritems():
nds=elementConn[k]
for nd in nds:
nodeArea[nd]+=0.25*v
#下面是提取每个frame中每个节点的NT11值
frames=st.frames
for fr in frames:
nt11=fr.fieldOutputs['NT11'].values
time=fr.frameValue
sumTp=0
sumAr=0
for va in nt11:
label=va.nodeLabel
data=va.data
if data<0:
area=nodeArea[label]
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)
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程