以下为代码,并都进行了标注。
# 导入必要的包
import pyautocad as pc
import numpy as np
from pathlib import Path
import win32com.client
import pythoncom
import time
import pandas as pd
import subprocess
#定义函数
def material_extraction(file_path):
dwg_files = Path(file_path).glob('*.dwg') #获取所有dwg文件
material_dict = {} #创建空字典
for dwg_file in dwg_files: #遍历所有dwg文件
acad= win32com.client.gencache.EnsureDispatch("AutoCAD.Application") #调用AutoCAD
print(f'Openning {dwg_file}') #打印打开的文件名
doc2 = acad.Documents.Open(dwg_file) #打开cad文件
time.sleep(5) #休眠5秒钟,避免打开时间过长
model = doc2.ModelSpace #获取模型空间
pyacad = pc.Autocad(create_if_not_exists = True) #创建一个新的pyautocad对象
model_space = pyacad.model #获取模型空间
uptext = [] #创建空列表
try: #尝试执行下面的代码
for obj in pyacad.iter_objects_fast('TDbSymbMultiLeader',container=model_space): #遍历模型空间中的所有TDbSymbMultiLeader对象
uptext.append(obj.uptext) #将uptext属性添加到uptext列表中
material_dict[doc2.Name] = tuple(set(uptext)) #将文件名作为key,uptext列表作为value,添加到material_dict字典中
except: #如果上面的代码执行失败,执行下面的代码
print(f'{dwg_file} failed') #打印失败的文件名
doc2.Close() #关闭文件
df = pd.DataFrame.from_dict(material_dict,orient='index').T #将material_dict字典转换为DataFrame对象
df.to_csv(Path(file_path)/'物料表.csv',encoding='gb2312') #将DataFrame对象转换为csv文件
print(f'打开项目文件夹:{file_path}') #打印打开的文件路径
subprocess.Popen(f'explorer {file_path}') #打开文件路径
file_path = Path.cwd() #设置文件路径
material_extraction(file_path) #调用函数

