Python对3D STEP/STP 文件解析

Python对3D STEP/STP 文件解析

import os
import string

def get_info(start, lines):
    res = {}
    tmp = lines[start]
    # lines.pop(start)
    cut_position = tmp.find("(")
    k, v = tmp[:cut_position], tmp[cut_position+1:-2].split(",")
    for i, vv in enumerate(v):
        v[i] = vv.replace('(','').replace(')','').strip()
        if v[i].startswith("#"):
            v[i] = get_info(v[i], lines)
    res[k] = v
    return res

if __name__ == '__main__':
    file = open("1.stp")
    s = file.read()
    file.close()
    s = s.replace('\r','').replace('ISO-10303-21\n','').replace('"END-ISO-10303-21\n"','')
    # header = s[s.index('HEADER\n'):s.index('ENDSEC\n')]
    # data = s[s.index('DATA\n'):s.index('ENDSEC\n')]
    header = s[s.index('HEADER') + len('HEADER') + 2:s.index('ENDSEC')]
    data = s[s.index('DATA') + len('DATA') + 2:]
    step_root = {}
    header_root = {}
    data_root = {}
    data_lines = {}
    header_list = header.split('\n')
    for line in header_list:
        cut_position1 = line.find("(")
        cut_position2 = line.find(";")
        key = line[0:cut_position1]
        value = line[cut_position1:cut_position2]
        header_root[key] = value
    step_root["header"] = header_root
    data_list = data.split('\n')
    # print(data_list[0:10])
    for line in data_list:
        cut_position = line.find("=")
        if cut_position != -1:
            key = line[0:cut_position].strip()
            value = line[cut_position + 2:].strip()
            data_lines[key] = value.strip()
    for key in data_lines.keys():
        line = data_lines[key]
        cut_position1 = line.find("(")
        cut_position2 = line.find(";") - 1
        list = []
        if line.find('#') == -1:continue
        key1 = line[0:cut_position1].strip()
        if key1 != 'EDGE_LOOP' : continue
        key = key + ' ' + key1
        print('******************************')
        temp = line[cut_position1 + 1:cut_position2]
        list = temp.split(',')
        list1 = temp.split(',')
        # print(list1)
        for i in range(len(list)):
            cur = list[i].replace('(','').replace(')','').strip()
            if cur[0] == "#":
                res = get_info(cur.strip(), data_lines)
                list1[i] = res
        data_root[key] = list1
        print(key,list1)
    step_root["data"] = data_root
    print(step_root)

后面可自行添加转JSON格式的代码

参考
[1]: https://blog.csdn.net/weixin_30307267/article/details/101163392

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值