使用python库读取dxf格式文件
提供了读取dxf文件功能的python库主要为dxfgrabber
和ezdxf
。下面介绍这两种库的详细用法:
关键建议
dxfgrabber
库比较老,但对于格式不规范的.dxf文件支持良好,能成功读取其中内容;
ezdxf
比较新,支持主流商业CAD软件导出的.dxf文件,但对于来路不明(可能格式不规范)的.dxf,读取会直接报错。
因此,若仅有读取需求,首选ezdxf
,若读取报错,尝试from ezdxf import recover
;最后尝试dxfgrabber
;
若有创建dxf需求,只能用ezdxf
。
dxfgrabber
dxfgrabber
是一个已经过时的库,最后一次更新在2020年。
这个库安装简单,非常轻量级,仅可用于读取dxf中的信息,不能用于将信息保存到dxf文件。
基本使用方式为:
import dxfgrabber
dxf = dxfgrabber.readfile(r'test_read.dxf')
for e in dxf.entities:
if e.dxftype == 'POLYLINE':# e是entities中的一个实体,可能是LINE、POLYLINE等类型。不同的类型具有不同的
x,y,z = e.points[0][0],e.points[0][1],e.points[0][2]
print(x,y,z)
调用readfile函数后,利用其返回的对象即可访问dxf文件中的所有内容。
ezdxf
ezdxf
是dxfgrabber
作者开发的新dxf库,至今仍在维护、更新。
特别注意:
python3.8
仅支持ezdxf
版本1.1.4
及更早的版本;python>=3.9
支持1.2.0
及以后的版本。
ezdxf
支持读写dxf格式文件,支持多种格式的dxf。基本使用方式如下:
import ezdxf
# helper function
def print_entity(e):
'''Show the polyline's information in cmd line.'''
print("POLYLINE on layer: %s\n" % e.dxf.layer)
print("%d points in this POLYLINE\n" % len(e.vertices))
for i,vertex in enumerate(e.vertices):
print(f'{i}-th point\'s coordinates: {vertex.dxf.location.xyz}')
doc = ezdxf.readfile(r'test_read.dxf')
# iterate over all entities in modelspace
msp = doc.modelspace()
for e in msp:
if e.dxftype() == "POLYLINE":
print_entity(e)
示例数据
这里提供一个包含POLYLINE类型数据的样例dxf文件,供读者测试读取效果用。