使用python库读取dxf格式文件

使用python库读取dxf格式文件

提供了读取dxf文件功能的python库主要为dxfgrabberezdxf。下面介绍这两种库的详细用法:

关键建议

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

ezdxfdxfgrabber作者开发的新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)

ezdxf官方文档

示例数据

这里提供一个包含POLYLINE类型数据的样例dxf文件,供读者测试读取效果用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值