20230505根据txt文件编译指定源文件(上)

文章介绍了一个Python脚本,用于读取包含组件信息的txt文件,根据命令行输入的组件名称,提取并存储特定组件的NAME和Header数据到字典中。脚本使用OrderedDict保持键的顺序,并处理多值情况。
摘要由CSDN通过智能技术生成

这里写目录标题

一、实现需求

假设有一个txt文件,当中有若干组件,存储内容格式类似如下

Param Input {
        NAME           ABC
}
Component Output {
		NAME           ABC
		Header			global.h		
}

现需根据输入的组件名称 来决定提取不同组件的参数

完整代码

# -*- coding:utf-8 -*-
import argparse
import csv
import os
import subprocess
import json
import re
import ConfigParser
import sys
from collections import OrderedDict # 字典按序 不需要直接定义 a = {} 即可

# 定义路径宏定义
TXT_DIR = "abc.txt"

# 获取命令行参数 python .\test.py Param
command_param = sys.argv[1]

# 判断命令行参数是否符合标准范围
if command_param not in ['Param', 'Component']:
    #不符合退出
    sys.exit()

# 读取component.txt文件
with open(TXT_DIR, 'r') as file:
    # 创建字典存储所有组件信息 {'函数名':{'类型':'变量','类型':['变量','变量']},'函数名':{'类型':'变量','类型':'变量'}}
    list_param = OrderedDict()
    for line in file:
        if not line.strip():
            continue
        # 找到命令行参数的组件
        if line.split()[0].startswith(command_param):
            # 获取该组件函数名
            function_name = line.split('{')[0].split()[1]
            # 创建子字典存储单个组件信息
            param_data = OrderedDict()
            # 将组件的信息存入子字典
            for line in file:
                if line.startswith('}'):
                    break
                else:# 单个类型含多个变量以列表形式存入字典
                    key, value = line.strip().split()
                    if ',' in value:
                        value = value.split(',')
                    param_data[key] = value
            # 将子字典存入总字典
            list_param[function_name] = param_data

# 遍历整个字典
search_values = []
for key in list_param.keys():
    # 如果存在 NAME 关键字,则进行下一步操作
    if 'NAME' in list_param[key].keys() or 'Header' in list_param[key].keys():
        # 获取 NAME 和 Header 关键字的值
        name_value = list_param[key]['NAME'] if 'NAME' in list_param[key].keys() else []
        hdr_files_value = list_param[key]['Header'] if 'Header' in list_param[key].keys() else []
        # 将 NAME 和 Header 值转换为列表类型
        if not isinstance(name_value, list):
            name_value = [name_value]
        if not isinstance(hdr_files_value, list):
            hdr_files_value = [hdr_files_value]
        
        #添加组件的函数名 如果需要则取消注释
        #search_values.append(key)
        
        # 将 NAME 和 Header 值合并成一个列表
        search_values += name_value
        search_values += hdr_files_value
sys.exit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值