civilpy:python进行AutoCAD绘图的两个库,土木狗可以有3 赞同 · 0 评论文章编辑
civilpy:python进行AutoCAD绘图批量打印,土木狗可以有2 赞同 · 2 评论文章编辑
# 导入所需库
from pyautocad import Autocad, APoint
import math
import os
import os.path as osp
import re# 正则表达式匹配dwg文件
reg = re.compile(r'.*(.dwg)$')# 定义文件路径
path = r"F:\22年14批预算明细"# 初始化列表,用于存储dwg文件路径
lst = []# 使用os.walk遍历指定路径下的所有文件
for dirpath, dirname, filename in os.walk(path):# 筛选出dwg文件,并添加到列表中li = [osp.join(dirpath, s) for s in filename if osp.isfile(osp.join(dirpath, s)) if reg.findall(s)]for i in li:if i:lst.append(i)# 遍历列表中的dwg文件
for filename in lst:# 连接CADacad = Autocad(create_if_not_exists=True, visible=True) # create_if_not_exists—如果CAD不运行,则会创建新的实例.visible -如果为True,新AutoCAD实例将可见(默认)# 打开/读取CAD文件acad.ActiveDocument.Application.Documents.open(filename)acad.prompt("Hello! ZWCAD from pyautocad.")print(acad.doc.Name)# 遍历CAD文件中的所有文本对象,打印其文本内容及坐标位置for text in acad.iter_objects("Text"): # 遍历Text对象# 修改对象属性,将文本中的"x批"字符替换为"14批"if 'x批' in text.TextString:print('text: %s at: %s' % (text.TextString, text.InsertionPoint))# 修改对象属性text1 = str(text.TextString)text1 = text1.replace('x批', '14批')text.TextString = text1acad.ActiveDocument.SaveAs(filename, 61) # 同名另存# 关闭当前文档acad.ActiveDocument.Close()# 退出cad程序
acad.app.Quit()
感兴趣的狗子们可以继续做如下优化:
- 在遍历文件时,可以考虑使用多线程或多进程来提高处理速度。
- 在修改文本对象时,可以添加异常处理,以应对意外情况。
- 考虑将代码封装成一个类,以便于后续扩展和维护。
civilpy:Python数据分析及可视化实例目录942 赞同 · 36 评论文章编辑