不打开CAD,如何查看DWG文件版本?(python实现)
基本原理
可以把dwg文件当做文本文件,然后直接用记事本打开dwg文件,看开头的几个字,AC1032,这个是AutoCAD的图形格式版本代号,
这里我用记事本打开的文件,开头的部分显示AC1032,就说明这个dwg文件是是cad2018格式,同样其它文件也都可以这样查看。
图形版本代号对应软件版本关系如下:
图形版本代号 | 软件版本代号 |
MC0.0 | DWG Release 1.1 |
AC1.2 | DWG R1.2 |
AC1.4 | DWG R1.4 |
AC1.50 | DWG Release 2.0 |
AC2.10 | DWG Release 2.10 |
AC1002 | DWG Release 2.5 |
AC1003 | DWG R2.6 |
AC1004 | DWG R9 |
AC1006 | DWG R10 |
AC1009 | DWG R11/12(LT R1/R2) |
AC1012 | DWG R13(LT95) |
AC1014 | DWG R14、14.01(LT97/LT98) |
AC1015 | DWG AutoCAD 2000/2000i/2002 |
AC1018 | DWG AutoCAD 2004/2005/2006 |
AC1021 | DWG AutoCAD 2007/2008/2009 |
AC1024 | DWG AutoCAD 2010/2011/2012 |
AC1027 | DWG AutoCAD 2013/2014/2015/2016/2017 |
AC1032 | DWG AutoCAD 2018/2019/2020/2021/2022/2023/2024 |
表格信息参考:https://www.autodesk.com.cn/support/technical/article/caas/sfdcarticles/sfdcarticles/CHS/drawing-version-codes-for-autocad.html
即是说,要查看DWG文件的版本,只需要把dwg文件当文本文件,打开查看开头的图形代码,根据这个关系表,就可以知道dwg文件的版本。
代码练习
OK,原理知道了,那我们现在假设出一个需求,然后尝试用代码去实现
需求:现在我有一套图纸,已经按各个专业分类好,放在不同的文件夹里面了。
-
1. 我想知道套图纸里面的每个dwg文件都是什么版本的,并且在dwg文件名后面加上文件的版本号,文件所在的目录结构不要变。
-
2. 统计一下这套图纸使用的文件版本都有哪些
这个需求很简单,这里先展示python来实现一下查看一张图纸的代码。
一张图纸会查看了,那整个文件夹内的图纸,无非就是一直循环就好了,还有重命名,只是我随便假设的一个需求,核心只要拿到dwg文件的版本,那就可以根据自己的需要来进行下一步操作了。
?
查看单张dwg文件的代码如下:
import os
import sys
def GetVersion(file):
\\\"\\\"\\\"
读取一个dwg文件的版本号
\\\"\\\"\\\"
# 打开文件的时候,用utf-8,还需要忽略解码错误的部分errors=\\\'ignore\\\'
# 因为dwg其实并不是文本文件,只是强行把它当文本文件看而已
with open(file, \\\'r\\\', encoding=\\\'utf-8\\\', errors=\\\'ignore\\\') as f:
# 这里读取一行就行,不用读太多
firstRowContent = f.readline()
# 然后就看这一行的开头部分是什么,对照表格就行
if firstRowContent.startswith(\\\'AC1014\\\'):
return \\\'vR14\\\'
elif firstRowContent.startswith(\\\'AC1015\\\'):
return \\\'V2000-2002\\\'
elif firstRowContent.startswith(\\\'AC1018\\\'):
return \\\'V2004-2006\\\'
elif firstRowContent.startswith(\\\'AC1021\\\'):
return \\\'V2007-2009\\\'
elif firstRowContent.startswith(\\\'AC1024\\\'):
return \\\'V2010-2012\\\'
elif firstRowContent.startswith(\\\'AC1027\\\'):
return \\\'V2013-2017\\\'
elif firstRowContent.startswith(\\\'AC1032\\\'):
return \\\'V2018-2024\\\'
else:
# 未知版本
return \\\'unKnown\\\'
if __name__ == \\\"__main__\\\":
# 这里修改成你电脑上的具体dwg文件路径
file = r\\\'d:/test/test.dwg\\\'
version = GetVersion(file)
print(f\\\'该文件的版本为:{version}\\\')
就这个函数就行,我这里只识别了R14-2024版本的,再低的版本,自己根据对照的表格,再加上条件和返回值就行了。上面的代码可以复制粘贴,然后修改一下路径,就可以看到结果了
这个需求的具体实现我就不展开说了,因为这个是随便假设出来的,主要还是想说一下怎么从dwg文件中读到版本号,就是上面的代码。
案例结果
这个小需求,我自己简单的把它封装成控制台的程序,有兴趣的同学可以在【质子开发者】公众号后台回复【dwg版本查看源码】获取已经打包好的命令行程序、以及对应的源代码。
大家可以下载下来然后自己改造一下,因为我写的并不符合实际的需求,代码的质量也很低,尽管我已经尽量删除一些没有必要的代码,但每个人基础不一样,有些同学看的时候,可能还是会觉得很冗余复杂。
看不懂也没关系,因为我写的也比较差,你可以先尝试自己构思去写一下就好了,重点是上面解析dwg的代码要看懂,那个已经是最核心、最精简的代码了。
该程序实现了如下功能:
-
1. 查看单个dwg文件的版本
-
2. 批量给某个文件夹内的所有dwg文件添加版本后缀
这个是递归批量命名的,即文件夹内有子文件夹,子文件夹里面的文件也会被重命名
-
3. 清空版本号,恢复原来的文件名。
同样是递归恢复命名
1.查看单个dwg文件的版本号
.\\\\CheckDwgVersion.exe \\\"D:\\\\Test\\\\全套施工图归档\\\\建筑\\\\1-出岛综合楼\\\\目1-图纸目录2013.09.10修改.dwg\\\"
?
2.给文件夹所有的dwg文件添加版本号
?
未命名前:
?
执行命令:
.\\\\CheckDwgVersion.exe \\\"D:\\\\Test\\\\全套施工图归档\\\\建筑\\\\S-设计说明\\\\S-设计说明\\\"
效果
3.清空版本号,恢复文件名
.\\\\CheckDwgVersion.exe \\\"D:\\\\Test\\\\全套施工图归档\\\\建筑\\\\S-设计说明\\\\S-设计说明\\\" r
效果:
?
最近打算创建一个关于Revit二次开发、CAD二次开发、图形算法等相关话题的交流群,欢迎大家入群交流。
?
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49911.html