python处理DWG文件

ezdxf是一个用于处理DXF(Drawing Exchange Format)文件的Python库。虽然它主要用于DXF文件,但因为它可以处理由AutoCAD和其他CAD程序生成的许多图形实体,所以有时也被用于间接处理DWG文件的内容,前提是DWG文件已经被转换为DXF格式。

ezdxf的主要特点包括:

  • 支持DXF R12至R2018的文件格式。
  • 提供了一个类似面向对象的API,可以创建、修改和读取DXF文件。
  • 支持绘制和编辑各种图形实体,如点、线、圆、弧、多段线、文字、块等。
  • 可以创建和编辑图层、块、尺寸标注等。
  • 支持低级数据库访问,可以操作DXF文件的内部结构。
  • 提供了一些高级功能,如创建和编辑表格、插入外部参照等。

安装ezdxf

可以通过pip安装ezdxf

pip install ezdxf

使用示例

以下是一个简单的示例,展示如何使用ezdxf读取一个DXF文件并输出一些基本信息:

import ezdxf# 打开一个DXF文件
doc = ezdxf.readfile('example.dxf')# 获取模型空间
msp = doc.modelspace()# 输出所有实体的类型和数量
entity_types = {}
for e in msp:etype = e.dxftype()entity_types[etype] = entity_types.get(etype, 0) + 1for type_name, count in entity_types.items():print(f"{type_name}: {count}")

创建DXF文件

ezdxf也可以用于创建DXF文件:

import ezdxf# 创建一个DXF文件
doc = ezdxf.new('R12')
msp = doc.modelspace()# 添加一个线段
msp.add_line((0, 0), (10, 10))# 保存文件
doc.saveas('new_dxf_file.dxf')

注意事项

虽然ezdxf是一个非常强大的库,但它并不支持所有DXF实体和属性,特别是那些在较新版本DXF中引入的特性。对于复杂的DWG文件,可能需要更专业的工具或库来处理,尤其是在需要读取或转换高版本DWG文件时。

需求:python 读取dwg文件中所有表格数据,转存为excel,表格之间存在关联关系,将有关联的表格存在一个sheet里。

第一步需要用AutoCAD将dwg文件另存为dxf。然后如下:

import ezdxf
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rowsdef read_dwg_tables(dwg2dxf_file):# 加载DWG文件doc = ezdxf.readfile(dwg2dxf_file)msp = doc.modelspace()tables_data = {}# 查找所有的表格实体for entity in msp:if entity.dxftype() == 'TABLE':table_name = entity.dxf.namerows = []# 遍历表格中的每一行for row in entity.rows():cols = []# 遍历行中的每一列for cell in row.cells():cols.append(cell.text())rows.append(cols)tables_data[table_name] = rowsreturn tables_datadef merge_associated_tables(tables_data):merged_tables = {}for name, data in tables_data.items():prefix = name.split('_')[0]  # 假设关联的表格名称共享相同的前缀if prefix not in merged_tables:merged_tables[prefix] = dataelse:# 将关联表格的数据追加到现有的数据列表中merged_tables[prefix].extend(data)return merged_tablesdef save_to_excel(tables_data, excel_file):wb = Workbook()ws = wb.activews.title = 'Merged Tables'for prefix, data in tables_data.items():df = pd.DataFrame(data[1:], columns=data[0])  # 假设第一行为标题for r in dataframe_to_rows(df, index=False, header=True):ws.append(r)wb.save(excel_file)# 指定DWG文件路径
dwg_file = 'path/to/your/dwg/file.dwg'
# 指定输出Excel文件路径
excel_file = 'path/to/output/excel/file.xlsx'tables_data = read_dwg_tables(dwg_file)
merged_tables = merge_associated_tables(tables_data)
save_to_excel(merged_tables, excel_file)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode热题100刷题16:74. 搜索二维矩阵、33. 搜索旋转排序数组、153. 寻找旋转排序数组中的最小值、98. 验证二叉搜索树

74. 搜索二维矩阵 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int row matrix.size();int col matrix[0].size();for(int i0;i<row;i) {//先排除一下不存在的情况if(i>0&&matrix[i][0]>target…

Qt Style Sheets-入门

Qt 样式表是一种强大的机制&#xff0c;允许您自定义小部件的外观&#xff0c;这是在通过子类化QStyle已经可行的基础上的补充。Qt 样式表的概念、术语和语法在很大程度上受到 HTML级联样式表 (CSS)的启发&#xff0c;但适用于小部件的世界。 概述 样式表是文本规范&#xff0…

前端出发能走多远——写在前面

2022 年 11 月 15 日&#xff0c;虽然在意料之中&#xff0c;但是靴子终于落地了&#xff1a;我们被裁了。互联网的寒冬肆意呼啸&#xff0c;冰冻了一批又一批人&#xff0c;大环境下能苟活已经很不错了。没有冰冻到你时&#xff0c;你觉得自己是寒冬的旁观者&#xff0c;寒冬降…

教室管理系统的开发与实现(Java+MySQL)

引言 教室管理系统是学校和培训机构日常运营中不可或缺的工具。本文将介绍如何使用Java、Swing GUI、MySQL和JDBC开发一个简单而有效的教室管理系统&#xff0c;并涵盖系统的登录认证、教室管理、查询、启用、暂停和排课管理功能。 技术栈介绍 Java&#xff1a;作为主要编程…

实战项目:仿muduo库实现并发服务器

目录 项目初始与项目演示HTTP服务器基础认识Reactor模式基础认识单Reactor单线程模式认识单Reactor多线程模式认识多Reactor多线程模式认识 目标定位总体大模块划分server模块的管理思想Buffer子模块Socket子模块Channel子模块Connection子模块Acceptor子模块TimerQueue子模块P…

FinClip 率先入驻 AWS Marketplace,加速全球市场布局

近日&#xff0c;凡泰极客旗下的小程序数字管理平台 FinClip 已成功上线亚马逊云科技&#xff08;AWS&#xff09;Marketplace。未来&#xff0c;FinClip 将主要服务于海外市场的开放银行、超级钱包、财富管理、社交电商、智慧城市解决方案等领域。 在全球市场的多样性需求推动…

Spring Boot应用的配置文件(application.properties或application.yml)指定应用连接MySQL数据库

<!-- MyBatisMysql 5添加依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version></dependency><dependency><groupId…

免费视频批量横转竖

简介 视频处理器 v1.3 是一款由是貔貅呀开发的视频编辑和处理工具&#xff0c;提供高效便捷的视频批量横转竖&#xff0c;主要功能&#xff1a; 导入与删除文件&#xff1a;轻松导入多个视频文件&#xff0c;删除不必要的文件。暂停与继续处理&#xff1a;随时暂停和继续处理。…

快速了解死锁及如何解决死锁问题

目录 什么是死锁&#xff1f; 死锁代码示例 产生死锁的条件&#xff1a; 死锁的危害&#xff1a; 如何解决死锁问题&#xff1f; 1、预防死锁&#xff08;破坏上述4个产生死锁的条件&#xff09;&#xff1a; 2、银行家算法 3、死锁的检测、解除 4、采用超时机制 什么…

JMeter介绍、安装配置以及快速入门

文章目录 1. JMeter简介2. JMeter安装配置3. JMeter快速入门 1. JMeter简介 Apache JMeter是一款开源的压力测试工具&#xff0c;主要用于测试静态和动态资源&#xff08;如静态文件、服务器、数据库、FTP服务器等&#xff09;的性能。它最初是为测试Web应用而设计的&#xff…

[C++]优先级队列

1 .了解优先级队列 优先级队列是一种容器适配器&#xff0c;根据一些严格的弱排序标准&#xff0c;专门设计使其第一个元素始终是它所包含的元素中最大的元素。 此上下文类似于堆&#xff0c;其中可以随时插入元素&#xff0c;并且只能检索最大堆元素&#xff08;优先级队列中顶…

基于ffmepg的视频剪辑

1.ffmpeg命令实现视频剪辑 FFmpeg是一个非常强大的视频处理工具&#xff0c;可以用来剪辑视频。以下是一个基本的FFmpeg命令行示例&#xff0c;用于剪辑视频&#xff1a; $ ffmpeg -i ./最后一滴水.mp4 -ss 0:0:20 -t 50 -c copy output.mp4-i ./最后一滴水.mp4 输入文件  …

小试牛刀-区块链WalletConnect协议数据解密

目录 1.编写目的 2.工作原理 3.分析过程 3.1 websokcet连接 3.2 连接后的消息 3.3 获取sym_key 3.4 解密数据 Welcome to Code Blocks blog 本篇文章主要介绍了 [WalletConnect协议数据解密] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 1.编写目的 最近在…

matlab y = 1/√x图像和y = 1/x图像

matlab y 1/√x图像和y 1/x图像 y 1/√x与y 1/x绘制结果y√x y 1/√x与y 1/x clc, clear, close all; length 3; axis_len 5;% Create a range of x values x linspace(0.01, length^2, 1000); % Avoid x 0 for 1/√x% Compute the corresponding y values y1 1 .…

链路聚合概述

目录 技术背景&#xff1a; 基本概念&#xff1a; 链路聚合的工作模式&#xff1a; 简介&#xff1a; 1&#xff09;Manual Load-balance&#xff08;手动负载分担&#xff09; 简介&#xff1a; 配置实施&#xff1a; 2&#xff09;LACP&#xff08;链路聚合控制协议&#xff…

银行业务知识全篇(财务知识、金融业务知识)

第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…

守护动物乐园:视频AI智能监管方案助力动物园安全与秩序管理

一、背景分析 近日&#xff0c;某大熊猫参观基地通报了4位游客在参观时&#xff0c;向大熊猫室外活动场内吐口水的不文明行为。这几位游客的行为违反了入园参观规定并可能对大熊猫造成严重危害&#xff0c;已经被该熊猫基地终身禁止再次进入参观。而在此前&#xff0c;另一熊猫…

Go: IM系统技术架构梳理 (2)

概述 整个IM系统的一般架构如下 我们这张图展示了整个IM系统的一般架构可见分为四层那最上面这一层是前端&#xff0c;包括哪些东西呢&#xff1f; 它包括两部分&#xff0c;第一部分是跟用户直接交互的比如说各种IOS APP, 各种安卓 APP还有各种 web APP 在浏览器里面打开的以…

python编程技巧——list计算

1. 两个列表间运算 在Python中&#xff0c;如果你有两个同长度的列表&#xff0c;并且你想要对它们进行元素级别的相减&#xff08;即&#xff0c;第一个列表的每个元素减去第二个列表的对应元素&#xff09;&#xff0c;你可以使用列表推导式或者zip函数来实现。 以下是两种…

centos(或openEuler系统)安装clickhouse集群

192.168.9.60、192.168.9.63、192.168.9.64三台centos&#xff08;或openEuler系统&#xff09;安装clickhouse集群&#xff08;数据分散&#xff0c;不是1主2备&#xff09; 一、安装clickhouse集群 以下操作在每台机器上一摸一样的执行&#xff1a; 关闭防火墙&#xff1a…