在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1603|回复: 2

[想法] python

[复制链接]
发表于 2022-12-22 10:22:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
import xlrd  # xlrd 的版本为1.2
import os
FILE_PATH = os.path.abspath(os.path.dirname(__file__))

# 文件路径,根据自己的文件名进行更改,但需要将py、slsx、sv这三个文件放在一个目录下
EXCEL_PATH = os.path.join(FILE_PATH, 'sram_data.xlsx')
SV_PATH = os.path.join(FILE_PATH, 'ecc.sv')


def read_xlsx(filename):
    # 打开excel文件
    data1 = xlrd.open_workbook(filename)
    # 读取第一个工作表
    table = data1.sheets()[0
    # excel行数
    n_rows = table.nrows
    excel_data = []
    for v in range(1, n_rows):
        # 从第二行开始读取数据,第一行不需要
        values = table.row_values(v)
        excel_data.append(values)
    return excel_data


# =============================================================================
#       x修改sram的信号
# =============================================================================

def write_sv(excel_data, sv_path):
    total_num = 0  # 模块替换数初始化
    # sv_data = open(sv_path, "r", encoding="utf-8")

    for i in range(0, len(excel_data)):  # 按行循环遍历excel_data
        # sv文件内容初始化为空,此后将按行读取原sv文件内容,并赋值给sv_file_data
        # 找到要替换的模块就更改该行内容
        sv_file_data = ""
        find_block_flag = 0     # 模块定位标志
        block_index = int(excel_data[i][0])  # 取出excel中的模块名
        num_col = len(excel_data[i]) - 1 # 求excel中每个模块的数据长度
        j = 1  # excel数据从第1列开始, 因为0列为模块名
        sv_data = open(sv_path, "r", encoding="utf-8")  # 每替换一个模块就打开一次sv文件
        for line in sv_data:  # 按行循环读取sv文件
            if str(line) == str(block_index) + ':begin\n':  # 判断excel中的模块序号是否在sv文件中,用模块序号+begin判断,防止误判
                find_block_flag = 1  # 找到要替换的模块,同时将该行文件写入sv_file_data
                sv_file_data += line
                total_num += 1
                continue

            if find_block_flag == 1 and j != num_col:  # 在sv文件中找到要替换的模块
                sv_data_line = line.split('=')[0 + '='  # 以‘=’划分sv文件的一行,并取‘=’前部分内容
                exl_data = '  ' + str(excel_data[i][j]) + ';'  # 将excel中的数据按照原sv文件格式,组合为新sv文件的后半部分
                line = sv_data_line + exl_data + '\n'
                j += 1
            sv_file_data += line

        assert find_block_flag == 1, f"excel中的模块序号:{block_index }不在sv文件中!"  # 断言,确保excel中的序号正确
        with open(sv_path, "w", encoding="utf-8") as f:
            f.write(sv_file_data)
        f.close()
        print(f'已替换sv文件中的第:{block_index}模块') if find_block_flag == 1 else ""
    print(f'完成全部共:{total_num}个模块的替换!')
# =============================================================================
#   替换特定行
# =============================================================================
def replace_data(excel_data,sv_path):
    sv_data = open(sv_path, "r", encoding="utf-8")  # 每替换一个模块就打开一次sv文件  
    for line in sv_data:
        print(line)
        if len(line) == 16:
            line = str(excel_data[0][5])
# =============================================================================
#           rep=""
#           with open("C:/Users/pgl/Desktop/change_sv_data - 副本/change_sv_data/ecc.sv","r") as fp:
#               contents = fp.read()
#               rep=contents.replace("eeee",str(excel_data[0][5]))
#               #rep = rep.replace("eeee","a")
#           with open("C:/Users/pgl/Desktop/change_sv_data - 副本/change_sv_data/ecc.sv","w") as fp2:
#               fp2.write(rep)
# =============================================================================

def case_genterate():
    case_name = []
    file_path = "C:/Users/pgl/Desktop/change_sv_data - 副本/change_sv_data"   
    Filelist = []
    Filelist = os.listdir(file_path)
    for i in range(len(Filelist)):
        Filelist[i = Filelist[i.replace("ecc","case")
        Filelist[i = Filelist[i.replace(".sv", "")
        print(Filelist[i)

if __name__ == '__main__':
    # 读取excel 文件
    excel_data = read_xlsx(EXCEL_PATH)
    # 写入sv文件,传入excel数据、sv文件路径
    write_sv(excel_data, SV_PATH)
#   replace_data(excel_data,SV_PATH)
    case_genterate()


发表于 2023-5-26 10:41:52 | 显示全部楼层
这是要做什么呢?至少配个说明嘛。
发表于 2024-1-19 09:38:04 | 显示全部楼层
這個程序要做什麼呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 00:22 , Processed in 0.016801 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表