批量汇总多个dwg文件的材料标准并汇总成物料表

以下为代码,并都进行了标注。

# 导入必要的包
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) #调用函数