引言
最近老师鼓励写脚本,仿真自动化,所以就立马向大师兄要了一些资源,学了半小时Python,迫不及待想写一些自己的脚本。modelsim仿真自动化需要写.do文件,vlog编译文件一个一个编译太麻烦,所以需要生成文件,把需要编译的文件路径写进生成的文件中。老师用C写了100多行代码实现了上面的功能,所以我想用Python写一个简单的脚本实现上面的功能。
代码块
import os
filelist = 'filelist'
type_1 = True
cnt = 2
file_end = '.f'
find_type= '.v'
bar_type = '\\'
filedir = os.getcwd()
stone = open(filelist+file_end,'w')
for root,dirs,files in os.walk(filedir):
for name in files:
if name.endswith(find_type):
if type_1:
stone.write(root +bar_type+ name + '\n')
else:
stone.write(root.replace(filedir + bar_type,('..'+bar_type)*cnt)+bar_type+ name + '\n')
stone.close()
要说明的一点是,这里的相对路径是相对.do文件的路径,相对路径也是写死的,也就是说.py文件和.do文件的目录级数是一定的,我这里是差了2级,所以×2,如果级数变了,需要手动改cnt 参数。我也想过不写死的方法,利用relpath函数从.do文件所在目录开始计算相对路径,也实现了。但是发现每个人的.do路径都不一样,移植性太差,也想过遍历查找.do文件路径,但是这样只能有一个.do文件,无论怎么做都相当于画蛇添足,没有必要。综合考虑还是采用这种方法。
遍历.v文件也是从当前.py目录开始遍历,也就是说为了能够遍历所有的.v文件,需要把这个脚本放在和存放.v文件的文件夹同级目录下。代码逻辑很简单,而且有注释,所以就不怎么讲了。因为刚学Python,所以下面写一下用到的函数,巩固一下。
Python语句
import:导入命令,可以导入模块,也可以导入包,本人看来相当于C的include。模块相当于实现某一个功能的.py文件。而包相当于模块和子包的集合,模块和包就本人看来相当于C的头文件。
os:这个模块提供了很多与操作系统相关的函数,执行os模块的函数相当于进行了操作系统命令,执行函数:os.函数名。里面函数有很多,我也没用到多少,所以就简单讲一下用到的函数。 os.getcwd():获得当前.py文件的路径,没有参数,返回的路径是绝对路径。 os.walk(path):这个函数厉害了,功能就是遍历当前目录下的所有文件。返回三个参数: root:当前所在目录 dirs:当前目录下的文件夹 files:当前目录下的文件,有多个文件会组成一个列表 这个函数会一层一层遍历下去,也就是说files永远是文件,所以只需要判断files中是否有自己想要找的文件类型,文件类型通过**endswith()**来判断。
endswith():判断字符串的后缀是不是和参数一样,一样的话返回True,否则返回False,用这种方法判断当前文件是不是要找到文件类型。
open():用于打开文件,并设置读写方式,这里只用到了w,表示只写模式。有好多参数,这里就不介绍了。没有文件就建立这个文件,并返回这个文件的句柄。
write():用于写文件,字符串直接相连可以用 +号
replace():用于字符串替换。root.replace(old,new):表示在root这个字符串中把old字符串替换成new这个字符串
本人Python刚学,所以上面函数肯定理解的不到位,所以如果想深入了解上面的函数建议大家去这个网站https://www.runoob.com/python3/python3-os-path.html,也请大家积极批评!
|