leeking30 发表于 2010-11-30 20:50

关于Python的循环和文件自动命名(dspace中的运用)

小弟进来使用dspace做实验, 由于需要进行大量参数的实验,因此采用dspace中的macro 进行自动实验 自动储存数据,发现control desk 软件生成的macro采用python进行编写,但小弟没听说过这种语言,特请学过此语言的前辈赐教,关于Python循环和自动命名这两个方面的问题

生成的宏 code如下,我将实验中每次需要修改的参数用红色粗体标记出来了
其中thre在设定范围为0:0.1:6
    delay 在设定范围为0:0.001:0.1
实验部分 (删除一些冗余部分)
Instrumentation().Layouts.Item("c:\\dspace\\3103_201011.lay").Instruments.Item("dSPACE NumericInput Control_1_1_1.thre = 0
Instrumentation().Layouts.Item("c:\\dspace\\3103_201011.lay").Instruments.Item("dSPACE PushButton Control_1").delay = 0.01

存数据部分,目的是修改最后t0.mat那部分
举个例子比如说实验中thre = 0.1,delay = 0.002 那t0.mat 就应该写成thre1delay2.mat的形式 (命名使用整数, 相当于thre*10,delay*1000)
SaveRefCapture("C:\\dspace\\beam_torsion_bending\\01072010\\TestThresholdBeamingDamping\\ExBend800\\ExTorsion300\\t0.mat")

因此,实质就是两个问题, 一个是在上述程序加上循环,其次是每执行一次,就按照参数设定 自动命名下,方便后期数据处理
请前辈给点指导

wqsong 发表于 2010-11-30 22:26

可以自己转化字符串分割,也可以使用正则表达式匹配。。。
有个问题
thre=0.1时候:
delay = 0.001和delay = 0.01命名不是重复了吗?
都是thre1delay1.mat???
还有
thre=0.1时候delay=4.002时候名字是什么?

leeking30 发表于 2010-11-30 22:36

回复 2 # wqsong 的帖子

thre=0.1时候:
delay = 0.001和delay = 0.01命名分别为thre1delay1 和thre1delay10 不重复
关于 thre=0.1时候delay=4.002, 因为开始设定为
thre在设定范围为0:0.1:6
delay 在设定范围为0:0.001:0.1
所以不存在delay=4.002这个值
假设存在 那么命名为thre1delay4002

能说大概说下 循环的格式 和 转化字符串的命令不 我从来没用过python 只会用matlab做这种工作麻烦了

smtmobly 发表于 2010-11-30 22:37

回复 2 # wqsong 的帖子

这里不重复。前面有说明的。

smtmobly 发表于 2010-11-30 22:39

我不知道楼主说的是什么意思。
如果自动命名,只要一个string就够了
filename=“thre”+str(thre)+“delay”+str(delay)+“.mat”

wqsong 发表于 2010-11-30 22:43

回复 5 # smtmobly 的帖子

似乎楼主意思要取小数后面整数部分

leeking30 发表于 2010-11-30 22:45

能不能告诉我下 循环怎么写
我试试看看 这个宏能不能跑起来
我原来做一个变量的实验 就不厌其烦的把每个值 都写了一遍
现在两个变量 必须要写循环了

还有个问题 你定义了filename
数据类型应该是字符串吧
SaveRefCapture("C:\dspace\beam_torsion_bending\01072010\TestThresholdBeamingDamping\ExBend800\ExTorsion300\filename") 就可以了? 我去试试看

Thanks for your reply!





wqsong 发表于 2010-11-30 22:48

本帖最后由 wqsong 于 2010-11-30 22:48 编辑

要是整体按照(命名使用整数, 相当于thre*10,delay*1000)
filename='thre'+str(10*thre)+'delay'+str(1000*delay)+'.mat'
这样就可以

leeking30 发表于 2010-11-30 22:48

回复 6 # wqsong 的帖子

差不多但是也不能完全这么说
比如0.12 和0.012 就应该是120 和 12
因为从0.001开始 步长0.001做实验 做到0.12 是第120组数据

wqsong 发表于 2010-11-30 22:49

回复 9 # leeking30 的帖子

filename='thre'+str(10*thre)+'delay'+str(1000*delay)+'.mat'
那这样就可以。

leeking30 发表于 2010-11-30 22:55

回复 10 # wqsong 的帖子

谢谢您的回复, 能麻烦补上循环那一段吗 python是好像 不是for写循环
搞不清楚怎么写循环
要是能在试验中跑通 用DSPACE做重复实验就太方便了

wqsong 发表于 2010-11-30 23:08

回复 11 # leeking30 的帖子

thre=0
delay=0
while thre<=6:
      while delay<=0.1:
                #do something
                filename='thre'+str(10*thre)+'delay'+str(1000*delay)+'.mat'
                SaveRefCapture('C:\\dspace\\beam_torsion_bending\\01072010\\TestThresholdBeamingDamping\\ExBend800\\ExTorsion300\\'+filename)
                delay+=0.001
      thre+=0.1思路就是这样的。具体thre和delay哪个是主序,自己调整一下。

wqsong 发表于 2010-11-30 23:09

python中的for循环很特殊,是一个迭代器遍历。

leeking30 发表于 2010-11-30 23:11

回复 12 # wqsong 的帖子

Thanks a million
我明天早上做实验试一下 然后给大家汇报下结果!

wqsong 发表于 2010-11-30 23:38

回复 14 # leeking30 的帖子

祝顺利。。。
页: [1] 2
查看完整版本: 关于Python的循环和文件自动命名(dspace中的运用)