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:
# 连接CAD
acad = 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 = text1
acad.ActiveDocument.SaveAs(filename, 61) # 同名另存
# 关闭当前文档
acad.ActiveDocument.Close()
# 退出cad程序
acad.app.Quit()
感兴趣的狗子们可以继续做如下优化:
- 在遍历文件时,可以考虑使用多线程或多进程来提高处理速度。
- 在修改文本对象时,可以添加异常处理,以应对意外情况。
- 考虑将代码封装成一个类,以便于后续扩展和维护。
civilpy:Python数据分析及可视化实例目录942 赞同 · 36 评论文章编辑