python做FPGA EG01约束文件文本格式批量更改

python做FPGA EG01约束文件文本格式批量更改

一切机械的重复的工作都应该自动化

这两天陪YJJ学FPGA,我也是头一次接触vivado和verilog,写起程序来真是让人头大。其中有一个EG01约束文件,就是用来配引脚的,但是原本文件的格式没法直接用,需要改一下。一个17页的文档呀,一条一条的改不得改到疫情结束呀-- 一切机械的重复的工作都应该自动化。 秉承这个理念我夸下海口:“放着我来!”于是蹩脚的使用python做FPGA EG01约束文件文本格式批量更改。

先看看我们具体要干什么
python做FPGA EG01约束文件文本格式批量更改
原来这个文档全都是最后一行那个样子,我们需要把它转化成上面两行那样。
再做一下任务分解
1.读取原文件
2.标记重要信息
3.提取重要信息
4.重新塑造格式
5.导出保存

最后做一下环境说明
本程序编写环境 win10+vscode+python3.8.1

1.读取原文件

FPGA的EG01约束文件是docx格式,python在做读取之前需要载入pyhton-docx包。
win+R打开运行框键入cmd打开命令窗口,进入到python加载包的路径也就是安装路径下的script文件夹,这是我的路径,cd是进入文件夹操作,后面的路径需自行更换

cd C:\Users\yuuki\AppData\Local\Programs\Python\Python38-32\Scripts

再使用pip下载python-docx包

pip install python-docx

做完这些准备之后打开编辑器vscode,导入我们刚才下载的操作word文档所需要的包

from docx import Document
from docx.shared import Inches

加载word文档

EG01 = Document('E:\yjj\EGO1约束文件.docx')  #打开EGO1约束文件.docx

来验证一下效果

for paragraph in EG01.paragraphs:   #遍历每一段
    print(paragraph.text)  #打印各段落内容文本

python做FPGA EG01约束文件文本格式批量更改
ok没问题,终端显示文档已按段导入成功

2.标记重要信息

通过分析文本特点我们发现,关键信息为本文第一张图里面突出的部分,而与这部分紧密连接的上下文,有共通的地方,利用每段单一存在的特殊符号做字符串分割是最轻松的,所以我们对文本信息先进行预处理,将关键信息上下文共通的地方在word里统一替换成每段唯一特殊符号(文档里有几句格式并不统一,需手动更改,以保证所提取信息的完整性和正确性),本例使用“ * ”和“ + ” 号
python做FPGA EG01约束文件文本格式批量更改

3.提取重要信息

接下来我们需要批量提取标题和关键信息

for paragraph in EG01.paragraphs:   #遍历每一段
    a = paragraph.text.split('*')  #提取关键信息(已在文件中标记)
    b = paragraph.text.split('+')
    if len(a) == 1:	#提取结果验证
        print(a[0])
    else:
        print(a[1],b[1])

在终端查看一下提取结果验证,ok没问题
python做FPGA EG01约束文件文本格式批量更改

4.重新塑造格式

按照目标格式编写word文件每一段内容模板并嵌入标题和关键信息

for paragraph in EG01.paragraphs:   #遍历每一段
    #print(paragraph.text)  #打印各段落内容文本
    a = paragraph.text.split('*')  #提取关键信息(已在文件中标记)
    b = paragraph.text.split('+')
    if len(a) == 1:
        yjj.add_paragraph(a[0]) #打印分割标题
    else:
        yjj.add_paragraph('set_property PACKAGE_PIN' + a[1] + '[get_ports{' + b[1] + '}]')  #按新格式要求打印文本
        yjj.add_paragraph('set_property IOSTANDARD LVCMOS33' + '[get_ports{' + b[1] + '}]')

5.导出保存

yjj.save("E:\yjj\yjj.docx") #保存文件

来让我们看一下最终效果
python做FPGA EG01约束文件文本格式批量更改
ok完美完成任务,收工

完整程序如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Yuuki'

from docx import Document
from docx.shared import Inches
import re

EG01 = Document('E:\yjj\EGO1约束文件.docx')  #打开EGO1约束文件.docx
yjj = Document()    #创建新文件
for paragraph in EG01.paragraphs:   #遍历每一段
    #print(paragraph.text)  #打印各段落内容文本
    a = paragraph.text.split('*')  #提取关键信息(已在文件中标记)
    b = paragraph.text.split('+')
    if len(a) == 1:
        yjj.add_paragraph(a[0]) #打印分割标题
    else:
        yjj.add_paragraph('set_property PACKAGE_PIN' + a[1] + '[get_ports{' + b[1] + '}]')  #按新格式要求打印文本
        yjj.add_paragraph('set_property IOSTANDARD LVCMOS33' + '[get_ports{' + b[1] + '}]')
        
yjj.save("E:\yjj\yjj.docx") #保存文件
上一篇:zabbix3.5监控搭建部署和监控httpd服务DOCX文档


下一篇:将word文本导入python