利用python编写自动化格式文档并打包成exe

本文档介绍了如何利用Python编写自动化脚本,根据配置文件生成特定格式的文档,并将其打包成exe可执行文件。涉及内容包括配置文件格式、读取配置信息、生成SVD格式文件、Python操作Excel以及打包过程中的命令选项。
摘要由CSDN通过智能技术生成

开发环境:

开发思路:

选择一个配置文件,txt格式
生成文件格式 ,txt格式
开发思路:读取配置文件信息,生成固定格式的文本文件,具体固定格式可根据自身需求生成

代码:

import os
file_name = 'reg_set.txt'
numbuf = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23',
          '24','25','26','27','28','29','30','31','U','UL']
commont = "/*!<                     "
commont1= " */"
numbuf2=["0x00000001","0x00000002","0x00000004","0x00000008","0x00000010","0x00000020","0x00000040","0x00000080",
         "0x00000100","0x00000200","0x00000400","0x00000800","0x00001000","0x00002000","0x00004000","0x00008000",
         "0x00010000","0x00020000","0x00040000","0x00080000","0x00100000","0x00200000","0x00400000","0x00800000",
         "0x01000000","0x02000000","0x04000000","0x08000000","0x10000000","0x20000000","0x40000000","0x80000000"]
head = "#define "
bitmask = ["0x0","0x1","0x3","0x7","0xF","0x1F","0x3F","0x7F","0xFF","0x1FF","0x3FF","0x7FF","0xFFF","0x1FFF","0x3FFF"]   #1bit:0x1 2bit:0x3 4bit:0xf
bitwide = 2


#strpos,bitpos
def bitwide1(bitw,bitpos):
    strbuf1 = head+strbuf+"_Pos" #define
    strbuf11 = "("+numbuf[bitpos]+numbuf[32]+")" #(U)
    resbuf ="{0:<60}{1:<60}".format(strbuf1,strbuf11)
    f2.write(resbuf)
    f2.write('\n')
    
    strbuf2 = head+strbuf+"_Msk" #mak
    strbuf22 = "("+bitmask[bitw]+numbuf[33]+"<<"+strbuf+"_Pos"+")"
##    strbuf222 = commont+commont1
    resbuf2 ="{0:<60}{1:<60}".format(strbuf2,strbuf22)
    f2.write(resbuf2)
    f2.write('\n')

    strbuf3 = head+strbuf
    strbuf33=strbuf+"_Msk"       #mak
    resbuf3 ="{0:<60}{1:<60}".format(strbuf3,strbuf33)
    f2.write(resbuf3)
    f2.write('\n')

def bitwide2(strpos):
    #3bit add _0 and _1
    strbuf5 = head+strbuf+"_0"       
    strbuf55 = "("+"0x1"+numbuf[33]+"<<"+strbuf +"_Pos"+")"
    resbuf5 ="{0:<60}{1:<60}".format(strbuf5,strbuf55)
    f2.write(resbuf5)
    f2.write('\n')
    
    strbuf6 = head+strbuf+"_1"
    strbuf66="("+"0x2"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(strbuf6,strbuf66)
    f2.write(resbuf6)
    f2.write('\n')

def bitwide3(strpos):
    #4bit add _2 
    bitbuf3 = head+strbuf+"_2"       
    bitbuf33="("+"0x4"+numbuf[33]+"<<"+strbuf +"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf3,bitbuf33)
    f2.write(resbuf6)
    f2.write('\n')

def bitwide4(strpos):
    bitbuf4 = head+strbuf+"_3"
    bitbuf44="("+"0x8"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf4,bitbuf44)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide5(strpos):
    # add _4
    bitbuf5 = head+strbuf+"_4"
    bitbuf55 ="("+"0x10"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf5,bitbuf55)
    f2.write(resbuf6)
    f2.write('\n')    

def bitwide6(strpos):
    # add _6
    bitbuf6 = head+strbuf+"_5"
    bitbuf66 = "("+"0x20"+numbuf[33]+"<<"+strbuf+"_Pos"+")" 
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf6,bitbuf66)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide7(strpos):
    # add _7
    bitbuf7 = head+strbuf+"_6"
    bitbuf77 = "("+"0x40"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf7,bitbuf77)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide8(strpos):
    # add _8
    bitbuf8 = head+strbuf+"_7"
    bitbuf88 ="("+"0x80"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide9(strpos):
    # add _9
    bitbuf8 = head+strbuf+"_8"
    bitbuf88 ="("+"0x100"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide10(strpos):
    # add _10
    bitbuf8 = head+strbuf+"_9"
    bitbuf88 ="("+"0x200"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide11(strpos):
    # add _11
    bitbuf8 = head+strbuf+"_10"
    bitbuf88 ="("+"0x400"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide12(strpos):
    # add _11
    bitbuf8 = head+strbuf+"_11"
    bitbuf88 ="("+"0x800"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide13(strpos):
    # add _11
    bitbuf8 = head+strbuf+"_12"
    bitbuf88 ="("+"0x1000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide14(strpos):
    # add _13
    bitbuf8 = head+strbuf+"_13"
    bitbuf88 ="("+"0x2000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')
    
def bitwide15(strpos):
    # add _13
    bitbuf8 = head+strbuf+"_14"
    bitbuf88 ="("+"0x4000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')

def bitwide16(strpos):
    # add _13
    bitbuf8 = head+strbuf+"_15"
    bitbuf88 ="("+"0x8000"+numbuf[33]+"<<"+strbuf+"_Pos"+")"
    resbuf6 ="{0:<60}{1:<60}".format(bitbuf8,bitbuf88)
    f2.write(resbuf6)
    f2.write('\n')  
    
with open(file_name , encoding='utf-8') as file_obj:
    strbufall = file_obj.readlines()
    filelen = len(strbufall)
   
print(filelen)

file_name1 = 'reg_result.txt'
f2=open(file_name1, mode='w+')
i=31   #register bit 
j=0
flen=filelen-1
bitpos = 0;
register_name = strbufall[0]

while (filelen):
    strspbuf = strbufall[flen].split("\t")
    strbuf = register_name.rstrip()+"_"+strspbuf[1].rstrip()
##    print(strspbuf[0])
##    print(strspbuf[1])
    strspbuflen =  len(strspbuf[0])
    if strspbuflen >2:
        bitwidestr = strspbuf[0].split(":")
        wideres=int(bitwidestr[0])-int(bitwidestr[1])
        bitwideint = int(wideres)+1
        bitpos = int(bitwidestr[1])
    else:
        bitwideint = 1
        bitpos = int(strspbuf[0])
##    print("bitwide:",bitwideint)
##    print("bitpos",bitpos)
##    print(strbuf)    
    if strbuf != register_name.rstrip()+"_"+"RSV":
        bitwide1(bitwideint,bitpos)
        if bitwideint == 2:
             bitwide2(flen)
        elif bitwideint == 3:
             bitwide2(flen)
             bitwide3(flen)
        elif bitwideint == 4:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
        elif bitwideint == 5:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
        elif bitwideint == 6:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
        elif bitwideint == 7:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
        elif bitwideint == 8:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
        elif bitwideint == 9:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
             bitwide9(flen)
        elif bitwideint == 10:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
             bitwide9(flen)
             bitwide10(flen)
        elif bitwideint == 11:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
             bitwide9(flen)
             bitwide10(flen)
             bitwide11(flen)
        elif bitwideint == 12:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
             bitwide9(flen)
             bitwide10(flen)
             bitwide11(flen)
             bitwide12(flen)
        elif bitwideint == 13:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
             bitwide9(flen)
             bitwide10(flen)
             bitwide11(flen)
             bitwide12(flen)
             bitwide13(flen)
        elif bitwideint == 14:
             bitwide2(flen)
             bitwide3(flen)
             bitwide4(flen)
             bitwide5(flen)
             bitwide6(flen)
             bitwide7(flen)
             bitwide8(flen)
             bitwide9(flen)
             bitwide10(flen)
             bitwide11(flen)
             bitwide12(flen)
             bitwide13(flen)
             bitwide14(flen)
        else:
            print("bit is >14 or bit <2")
    else:
        print("register = rsv")

    j=j+1
    flen= flen-1
    filelen=filelen-1
    if flen==0:
        break;
##    i=i-bitwideint
##    print("i=",i)
    
f2.close()


配置文件格式:

ip名字加寄存器名字加bit位描述

打包程序:

需要库:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值