python匹配效率对比及gzip用法

后仿真时会使用sdf文件确认时序信息反标到设计当中,仿真时sdf信息没有反标上,分析之后是因为有sdf文件的参数设置有问题,需要手动替换.需要替换的参数并不多,但是sdf文件比较大,有600M左右,打开编辑比较麻烦.分析之后发现,需要替换的参数可以归为一类,想到用脚本处理.
1.效率比较
a.matchobj = re.search(r’(.*)(\s+)((\d+.\d+)(\d+.\d+))(\s+)(infinity::infinity)(.*)’,de_line,re.M|re.I)
匹配的数据中有6000+万行,每行都用这个匹配,匹配之后在对此行中infinity用前面的数据替换,完成 一次这样的操作需要30+分钟;
b.matchobj1 = re.search(r’(infinity::infinity)’,de_line,re.M|re.I)
记得之前用perl脚本的时候说像.*这样的匹配先会全匹配,然后再慢慢吐出来,花费的时间比较久;由于需要替换的行并不多,满足此条件的不多,所以就想先用关键信息匹配,匹配之后再用a中的条件匹配.修改之后整个运行的时间下降到秒级.
c.gzip写入
因为sdf文件是以.gz结束的,即压缩之后的,再a和b中重新写入的时候没有用gzip,考虑到此之后,决定用gzip打开,重新运行b中的匹配,运行的时间在10分钟左右,后续在优化.
2.gzip处理
gzip打开文件时只需要在open前面加上gzip即可,gzip需要import导入
import gzip
with gzip.open("{}".format(gz_name[i]),“w”) as fw:
3.源代码
python匹配效率对比及gzip用法
python匹配效率对比及gzip用法
python匹配效率对比及gzip用法