声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4929|回复: 22

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

[复制链接]
发表于 2010-11-30 20:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
小弟进来使用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")

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

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2010-11-30 22:26 | 显示全部楼层
可以自己转化字符串分割,也可以使用正则表达式匹配。。。
有个问题
thre=0.1时候:
delay = 0.001和delay = 0.01命名不是重复了吗?
都是thre1delay1.mat???
还有
thre=0.1时候delay=4.002时候名字是什么?
 楼主| 发表于 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做这种工作  麻烦了
发表于 2010-11-30 22:37 | 显示全部楼层
回复 2 # wqsong 的帖子

这里不重复。前面有说明的。
发表于 2010-11-30 22:39 | 显示全部楼层
我不知道楼主说的是什么意思。
如果自动命名,只要一个string就够了
filename=“thre”+str(thre)+“delay”+str(delay)+“.mat”

评分

1

查看全部评分

发表于 2010-11-30 22:43 | 显示全部楼层
回复 5 # smtmobly 的帖子

似乎楼主意思要取小数后面整数部分
 楼主| 发表于 2010-11-30 22:45 | 显示全部楼层
能不能告诉我下 循环怎么写
我试试看看 这个宏能不能跑起来
我原来做一个变量的实验 就不厌其烦的把每个值 都写了一遍
现在两个变量 必须要写循环了

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

Thanks for your reply!





发表于 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'
这样就可以
 楼主| 发表于 2010-11-30 22:48 | 显示全部楼层
回复 6 # wqsong 的帖子

差不多  但是也不能完全这么说
比如0.12 和0.012 就应该是120 和 12  
因为从0.001开始 步长0.001做实验 做到0.12 是第120组数据
发表于 2010-11-30 22:49 | 显示全部楼层
回复 9 # leeking30 的帖子

filename='thre'+str(10*thre)+'delay'+str(1000*delay)+'.mat'
那这样就可以。
 楼主| 发表于 2010-11-30 22:55 | 显示全部楼层
回复 10 # wqsong 的帖子

谢谢您的回复, 能麻烦补上循环那一段吗 python是好像 不是for写循环
搞不清楚怎么写循环
要是能在试验中跑通 用DSPACE做重复实验就太方便了
发表于 2010-11-30 23:08 | 显示全部楼层
回复 11 # leeking30 的帖子

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

评分

1

查看全部评分

发表于 2010-11-30 23:09 | 显示全部楼层
python中的for循环很特殊,是一个迭代器遍历。
 楼主| 发表于 2010-11-30 23:11 | 显示全部楼层
回复 12 # wqsong 的帖子

Thanks a million
我明天早上做实验试一下 然后给大家汇报下结果!
发表于 2010-11-30 23:38 | 显示全部楼层
回复 14 # leeking30 的帖子

祝顺利。。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-29 20:49 , Processed in 0.133306 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表