一、实现需求
假设有一个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()