利用argparse库分析maya动画文件的资产

Maya ma文件支持ASCII格式,可以直接用记事本打开,可以很快分析出文件参考的哪些文件,在替换资产、更新文件上可以使用

from __future__ import print_function

import argparse
import os
import re

class MayaRefParser(object):
    def __init__(self, ma_file=None):
        self.header = ''
        self.refHeader = ''
        self.otherHeader = ''
        self.contents = ''
        self.contentsLineNum = 0
        self.ma_file = ma_file
        self.layoutIsLoaded = False
        
        self._need_update_files = []
        
        if ma_file and os.path.isfile(ma_file):
            self.parse(ma_file)
    
    def parse(self, ma_file):
        '''
        Store header refHeader otherHeader and contentsLineNum after parsing
        '''
        with open(ma_file) as inFile:
            # print("open file {}".format(ma_file))
            inHeader = True
            inRefHeader = False
            inOtherHeader = False
            inContents = False
            
            for line in inFile:
                # if line.startswith('fileInfo "UUID"'):
                #     print(line)
                if inHeader and line.startswith('file -r'):
                    inHeader = False
                    inRefHeader = True
                elif inRefHeader and not line.startswith('file -r') and not line.startswith('\t'):
                    inRefHeader = False
                    inOtherHeader = True
                elif inOtherHeader and line.startswith('createNode'):
                    inOtherHeader = False
                    inContents = True
                elif line.startswith('fileInfo "UUID"'):
                    inHeader = False
                    inContents = True
                if inHeader:
                    self.header += line
                elif inRefHeader:
                    self.refHeader += line
                elif inOtherHeader:
                    self.otherHeader += line
                elif inContents:
                    break
                
                self.contentsLineNum += 1
                # print("close file {}".format(ma_file))
    def _par_ref_header(self, header):
        parser = argparse.ArgumentParser()
        parser.add_argument('-rfn')
        parser.add_argument('-rdi')
        parser.add_argument('-ns')
        parser.add_argument('-dr')
        parser.add_argument('-typ')
        parser.add_argument('-op')
        # group = parser.add_mutually_exclusive_group()
        parser.add_argument('-r', action='store_true')
        parser.add_argument('file')
        parser.add_argument('-rpr')
        parser.add_argument('-shd', action='append')
        # args = parser.parse_args(header)
    
        _space_re = re.compile(r'["](.*?)["]', re.S) #最小匹配
        _spaces = re.findall(_space_re, header)
        if _spaces:
            for _space in _spaces:
                if " " in _space:
                    header = header.replace(_space, _space.replace(" ", ""))
    
        args = parser.parse_args(header.split()[1:])
        # args.file = args.file.replace("'","")
        _old_file, _new_file = self.get_no_version(args.file)#要在外面重构,结合自己的环境用来替换文件

        return _old_file, _new_file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值