python学习笔记38-递归展开filelist

部署运行你感兴趣的模型镜像

文章目录

递归展开filelist

有时候filelist中嵌套了很多层, 仿真报错时不太容易找到出错是的文件在哪个fileslist, 这时使用展开的filelist就比较容易定位问题.

code

dict_variables = dict()
dict_variables['STEM'] = '/project/xx/a0/work_dir'; #filelist中出现的环境变量, 在展开新filelist时用于打开对应文件.

def _parse_line_str(line):
    for k, v in dict_variables.items():
        #把变量替换为实际路径
        line = re.sub(r'\$'   + k + r'\b', v, line)
        line = re.sub(r'\$\{' + k + r'\}', v, line)

    return line

def _parse_filelist(s_one_file, depth=0):
    _list = list()

    _s_prefix = ' ' * (depth*4)

    fin = open(s_one_file, 'r')

    for line in fin:
        line = _parse_line_str(line)

        _o_match_filelist = re.match(r'^\s*-f\s+(\S+)\s*$', line)

        if _o_match_filelist:
            _list.append(f'{_s_prefix}//----------')
            _list.append(f'{_s_prefix}//found a new filelist')
            _list.append(f'{_s_prefix}//{line}')
            _list.append(f'{_s_prefix}//----------')

            #遇到新的filelist, 递归调用函数, 展开新的filelist
            _s_new_filelist = _o_match_filelist.group(1)
            _list.extend(_parse_filelist(_s_new_filelist, depth+1))

        else:
            #遇到普通文件, 或其它行(注释, 空行, -v -y +incdir等), 直接保留
            _list.append(f'{_s_prefix}{line}')

    fin.close()

    return _list

def _write_output_file(list_lines):
    fout = open(f'output.file', 'w')

    for line in list_lines:
        fout.write(f'{line}\n')

    fout.close()

list_lines = _parse_filelist('tmb_rtl.f')
_write_output_file(list_lines)

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值