Python结合pyautocad与openpyxl提取CAD文本及坐标数据
本文介绍如何利用Python的pyautocad库连接AutoCAD,通过iter_objects方法遍历Text对象,获取文本字符串及插入点坐标。结合openpyxl库,将提取的数据写入Excel文件。文中提供了三个示例,演示了基础数据导出、特定型号(如BM30/BM65)筛选以及多型号(Vigi/iC65等)批量处理的方法,帮助开发者实现CAD图纸数据的自动化整理。
Python处理CAD文件概述
本文介绍了如何使用Python语言,配合pyautocad和openpyxl两个库来处理CAD文件。以下示例旨在为读者提供具体的操作参考。
基础数据提取示例
示例1展示了一个基础的数据提取流程。
from pyautocad import Autocad
import openpyxl
wb=openpyxl.load_workbook('./cads.xlsx')
sheet=wb.get_sheet_by_name('Sheet1')
data=[]
pset=[]
acad=Autocad(create_if_not_exists=True)
acad.prompt('hello this is python in')
for text in acad.iter_objects('Text'):
data.append(text.TextString)
from pyautocad import APoint
for text in acad.iter_objects('Text'):
pset.append(APoint(text.InsertionPoint))
print len(data)
for d in range(1,len(data)):
sheet['A'+str(d)].value=data[d]
sheet['B'+str(d)].value=str(pset[d].x)
sheet['C'+str(d)].value=str(pset[d].y)
wb.save('aabb1.xlsx')
print 'success aabb1.xlsx'
需要注意的是,pyautocad库中实际上提供了针对表格(Table)对象的API支持。
特定型号数据筛选示例
示例2演示了如何根据特定前缀筛选数据。
from pyautocad import Autocad
import openpyxl
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
wb=openpyxl.load_workbook('./aabb.xlsx')
sheet=wb.get_sheet_by_name('Sheet1')
data=[]
acad=Autocad(create_if_not_exists=True)
acad.prompt('hello this is python in')
for text in acad.iter_objects('Text'):
data.append(text.TextString)
print len(data)
for d in range(1,len(data)):
if(str(data[d])[0:4]=="BM30" or str(data[d])[0:4]=="BM65"):
sheet['A'+str(d)].value=data[d]
wb.save('ky1.xlsx')
print 'success ky1.xlsx'
该示例中仅截取了以BM30和BM65开头的数据进行保存。
多条件批量处理示例
示例3展示了更复杂的多条件筛选逻辑。
import openpyxl
from pyautocad import Autocad,APoint
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
wb=openpyxl.load_workbook("a.xlsx")
sheet=wb.get_sheet_by_name("Sheet1")
data=[]
px=[]
py=[]
acad=Autocad(create_if_not_exists=True)
acad.prompt("hello this is mt")
for text in acad.iter_objects('Text'):
data.append(text.TextString)
#print text.TextString
px.append(APoint(text.InsertionPoint).x)
py.append(APoint(text.InsertionPoint).y)
#print text.InsertionPoint
print len(data)
print "eof"
for d in range(1,len(data)):
if(str(data[d])[0:4]=="Vigi" or str(data[d])[0:4]=="iC65" or str(data[d])[0:3]=="CVS" or str(data[d])[0:3]=="PRD" or str(data[d])[0:4]=="DDZY"):
sheet['A'+str(d)]=data[d]
sheet['B'+str(d)]=px[d]
sheet["C"+str(d)]=py[d]
# print data[d]
wb.save("kv.xlsx")
print "success"
#or str(data[d])[0:3]=="CVS" or str(data[d])[0:3]=="PRD" or str(data[d])[0:4]=="DDZY"
如果您希望深入了解Python在文件目录操作、文本处理、数据结构算法、函数技巧、字符串操作以及入门进阶方面的内容,可以查阅本站的相关专题,如《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。
希望上述内容能对您的Python编程实践有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













