Exemple #1
0
    def classified(self):
        """
        设计国土行业数据guoqing_frame的验证规则(国情影像—分幅影像)
        完成 负责人 王学谦 在这里检验guoqing_frame的识别规则
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext  # 初始化需要的参数
        file_path = self.file_info.file_path
        file_object_name = file_main_name[:]

        if len(file_main_name) >= 21:  # 本类文件默认至少为20位
            file_object_name = file_main_name[:20]  # 截取前20位
        elif len(file_main_name) == 20:  # 20位基本为附属文件
            pass
        else:
            return self.Object_Confirm_IUnKnown, self._object_name

        match_str = '(?i)^' + file_object_name + r'[a-zA-Z][.]tif'
        check_file_main_name_exist = \
            CFile.find_file_or_subpath_of_path(file_path, match_str, CFile.MatchType_Regex)
        if not check_file_main_name_exist:  # 检查主文件存在性
            return self.Object_Confirm_IUnKnown, self._object_name

        # 文件名第1,4,11,12,16,21位为字母,第2,3,5-10,14,15,17-20位是数字
        name_sub_1 = file_main_name[0:1]
        name_sub_2_to_3 = file_main_name[1:3]
        name_sub_4 = file_main_name[3:4]
        name_sub_5_to_10 = file_main_name[4:10]
        name_sub_11_to_12 = file_main_name[10:12]
        name_sub_14_to_15 = file_main_name[13:15]
        name_sub_16 = file_main_name[15:16]
        name_sub_17_to_20 = file_main_name[16:20]
        name_sub_21 = file_main_name[20:21]
        if CUtils.text_is_alpha(name_sub_1) is False \
                or CUtils.text_is_numeric(name_sub_2_to_3) is False \
                or CUtils.text_is_alpha(name_sub_4) is False \
                or CUtils.text_is_numeric(name_sub_5_to_10) is False \
                or CUtils.text_is_alpha(name_sub_11_to_12) is False \
                or CUtils.text_is_numeric(name_sub_14_to_15) is False \
                or CUtils.text_is_alpha(name_sub_16) is False \
                or CUtils.text_is_numeric(name_sub_17_to_20) is False \
                or CUtils.text_is_alpha(name_sub_21) is False:
            return self.Object_Confirm_IUnKnown, self._object_name

        if len(file_main_name) == 21 and CUtils.equal_ignore_case(
                file_ext, 'tif'):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
            self.add_file_to_detail_list(file_object_name)  # 在这里设置不同名的附属文件
        else:
            self._object_confirm = self.Object_Confirm_IKnown_Not
            self._object_name = None

        return self._object_confirm, self._object_name
    def classified(self):
        """
        设计国土行业数据的dem_10_dem验证规则
        完成 负责人 李宪 在这里检验dem_10_dem的识别规则
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext

        check_file_main_name_length = len(file_main_name) == 13
        if not check_file_main_name_length:
            return self.Object_Confirm_IUnKnown, self._object_name

        file_main_name_with_path = CFile.join_file(self.file_info.file_path,
                                                   file_main_name)
        check_file_main_name_exist_tif = CFile.file_or_path_exist(
            '{0}.{1}'.format(file_main_name_with_path, self.Name_Tif))
        check_file_main_name_exist_bil = CFile.file_or_path_exist(
            '{0}.{1}'.format(file_main_name_with_path, self.Name_Bil))
        if (not check_file_main_name_exist_tif) and (
                not check_file_main_name_exist_bil):
            return self.Object_Confirm_IUnKnown, self._object_name
        """
        下面判别第1位是字母
        下面判别第4位是字母
        下面判别第23位是数字
        下面判别第567位是数字
        下面判别第8910位是数字
        下面判别第111213位是DOM
        """
        char_1 = file_main_name[0:1]
        char_2_3 = file_main_name[1:3]
        char_4 = file_main_name[3:4]
        char_5_to_7 = file_main_name[4:7]
        char_8_to_10 = file_main_name[7:10]
        char_11_to_13 = file_main_name[10:13]
        if CUtils.text_is_alpha(char_1) is False \
                or CUtils.text_is_numeric(char_2_3) is False \
                or CUtils.text_is_alpha(char_4) is False \
                or CUtils.text_is_numeric(char_5_to_7) is False \
                or CUtils.text_is_numeric(char_8_to_10) is False \
                or CUtils.equal_ignore_case(char_11_to_13, "DEM") is False:
            return self.Object_Confirm_IUnKnown, self._object_name

        if CUtils.equal_ignore_case(file_ext, self.Name_Tif) \
                or CUtils.equal_ignore_case(file_ext, self.Name_Bil):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
        else:
            self._object_confirm = self.Object_Confirm_IKnown_Not
            self._object_name = None

        return self._object_confirm, self._object_name
Exemple #3
0
    def classified(self):
        """
        设计国土行业数据的dom-10验证规则
        完成 负责人 李宪 在这里检验dem-10的元数据文件格式时, 应该一个一个类型的对比, 找到文件时, 将该文件的格式和文件名存储到类的私有属性中, 以便在元数据处理时直接使用
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext

        check_file_main_name_length = len(file_main_name) == 10
        if not check_file_main_name_length:
            return self.Object_Confirm_IUnKnown, self._object_name

        file_main_name_with_path = CFile.join_file(self.file_info.file_path,
                                                   file_main_name)
        check_file_main_name_exist_tif = CFile.file_or_path_exist(
            '{0}.{1}'.format(file_main_name_with_path, self.Name_Tif))
        check_file_main_name_exist_bil = CFile.file_or_path_exist(
            '{0}.{1}'.format(file_main_name_with_path, self.Name_Bil))
        if (not check_file_main_name_exist_tif) and (
                not check_file_main_name_exist_bil):
            return self.Object_Confirm_IUnKnown, self._object_name
        """
        下面判别第1位是字母
        下面判别第4位是字母
        下面判别第23位是数字
        下面判别第567位是数字
        下面判别第8910位是数字
        """
        char_1 = file_main_name[0:1]
        char_2_3 = file_main_name[1:3]
        char_4 = file_main_name[3:4]
        char_5_to_7 = file_main_name[4:7]
        char_8_to_10 = file_main_name[7:10]
        if CUtils.text_is_alpha(char_1) is False \
                or CUtils.text_is_numeric(char_2_3) is False \
                or CUtils.text_is_alpha(char_4) is False \
                or CUtils.text_is_numeric(char_5_to_7) is False \
                or CUtils.text_is_numeric(char_8_to_10) is False:
            return self.Object_Confirm_IUnKnown, self._object_name

        if CUtils.equal_ignore_case(file_ext, self.Name_Tif) \
                or CUtils.equal_ignore_case(file_ext, self.Name_Bil):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
        else:
            self._object_confirm = self.Object_Confirm_IKnown_Not
            self._object_name = None

        return self._object_confirm, self._object_name
    def classified(self):
        """
        设计国土行业数据的dom-12验证规则
        完成 负责人 李宪 在这里检验dom-12的识别规则
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext

        check_file_main_name_length = len(file_main_name) == 12
        if not check_file_main_name_length:
            return self.Object_Confirm_IUnKnown, self._object_name

        file_main_name_with_path = CFile.join_file(self.file_info.file_path, file_main_name)
        check_file_main_name_exist = CFile.file_or_path_exist('{0}.{1}'.format(file_main_name_with_path, self.Name_Tif))

        if not check_file_main_name_exist:
            return self.Object_Confirm_IUnKnown, self._object_name

        """
        下面判别第1位是字母
        下面判别第4位是字母
        下面判别第23位是数字
        下面判别第567位是数字
        下面判别第8910位是数字
        """
        char_1 = file_main_name[0:1]
        char_2_3 = file_main_name[1:3]
        char_4 = file_main_name[3:4]
        char_5_to_7 = file_main_name[4:7]
        char_8_to_12 = file_main_name[7:12]
        if CUtils.text_is_alpha(char_1) is False \
                or CUtils.text_is_numeric(char_2_3) is False \
                or CUtils.text_is_alpha(char_4) is False \
                or CUtils.text_is_numeric(char_5_to_7) is False \
                or CUtils.text_is_numeric(char_8_to_12) is False:
            return self.Object_Confirm_IUnKnown, self._object_name

        if CUtils.equal_ignore_case(file_ext, self.Name_Tif):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
        else:
            self._object_confirm = self.Object_Confirm_IKnown_Not
            self._object_name = None

        return self._object_confirm, self._object_name
Exemple #5
0
    def classified(self):
        """
        设计国土行业数据guoqing_scene_noblock的验证规则(国情影像—非分块),不带数字
        完成 负责人 王学谦 在这里检验guoqing_scene_noblock的识别规则
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext  # 初始化需要的参数
        file_path = self.file_info.file_path
        file_object_name = file_main_name[:]  # 这里需要取得规则匹配用的‘对象名’,即去除尾部字母等字符的名

        # 正则表达式,(?i)代表大小写不敏感,^代表字符串开头,$代表字符串结尾
        # [a-z]指匹配所有小写字母,配合(?i)匹配所有字母,{2}代表前面的匹配模式匹配2次,即[a-z]{2}匹配两个字母
        # \d匹配数字,即[0-9],即\d+匹配一个或多个非空字符,\d{4}匹配四个任意数字
        # [0123]一般指匹配一个括号中任意字符,即匹配0到3
        # \S用于匹配所有非空字符,+代表匹配前面字符的数量为至少一个,即\S+匹配一个或多个非空字符
        if len(file_main_name) < 13:
            return self.Object_Confirm_IUnKnown, self._object_name
        # 下面正则:开头两个字母,字母后任意数量字符,而后匹配8位时间,4位任意数字(年份),[01]\d为月份,[0123]\d日
        if CUtils.text_match_re(
                file_main_name, r'(?i)^[a-z]{2}\S+'
                r'\d{4}[01]\d[0123]\d[a-z]$'):  # 结尾为单个字母的情况
            file_object_name = file_main_name[:-1]  # 这里需要取得规则匹配用的‘对象名’,即去除尾部字母
        elif CUtils.text_match_re(
                file_main_name,
                r'(?i)^[a-z]{2}\S+'  # 带-的抛出
                r'\d{4}[01]\d[0123]\d[a-z][-]\d+$'):
            return self.Object_Confirm_IUnKnown, self._object_name
        elif CUtils.text_match_re(
                file_main_name,
                r'(?i)^[a-z]{2}\S+'  # 尾部没字母取原本主名
                r'\d{4}[01]\d[0123]\d$'):
            pass
        elif CUtils.text_match_re(
                file_main_name, r'(?i)^[a-z]{2}\S+'
                r'\d{4}[01]\d[0123]\d\S+$'):  # 结尾为多个的字符情况
            file_object_name_list = re.findall(
                r'(?i)^([a-z]{2}\S+\d{4}[01]\d[0123]\d)\S+$', file_main_name)
            file_object_name = file_object_name_list[0]  # 剔除结尾多个字符

        match_str = '(?i)^' + file_object_name + r'[FMP].img$'  # 匹配主文件的规则,即对象名+F/M/P
        check_file_main_name_exist = CFile.find_file_or_subpath_of_path(
            file_path, match_str, CFile.MatchType_Regex)
        if not check_file_main_name_exist:  # 检查主文件存在性
            return self.Object_Confirm_IUnKnown, self._object_name
        """文件名第1-2位为字母,最后1位是字母在F/P/M中,倒数2-9位是数字"""
        name_sub_1_to_2 = file_object_name[0:2]
        name_sub_backwards_9_to_2 = file_object_name[-8:]
        if CUtils.text_is_alpha(name_sub_1_to_2) is False \
                or CUtils.text_is_numeric(name_sub_backwards_9_to_2) is False:
            return self.Object_Confirm_IUnKnown, self._object_name

        # 作为对象的主文件存在优先级,F-M-P,比如需要F的文件不存在,M才能是主文件
        # 能跑到这里的文件已经可以认为不是主文件,就是附属文件
        match_str_f = '(?i)^' + file_object_name + r'[F].img$'
        match_str_fm = '(?i)^' + file_object_name + r'[FM].img$'
        name_sub_backwards_1 = file_main_name[-1:]
        if CUtils.equal_ignore_case(name_sub_backwards_1.lower(), 'f') \
                and CUtils.equal_ignore_case(file_ext.lower(), 'img'):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
            self.add_file_to_detail_list(file_object_name)
        elif CUtils.equal_ignore_case(name_sub_backwards_1.lower(), 'm') \
                and CUtils.equal_ignore_case(file_ext.lower(), 'img') \
                and not CFile.find_file_or_subpath_of_path(file_path, match_str_f, CFile.MatchType_Regex):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
            self.add_file_to_detail_list(file_object_name)
        elif CUtils.equal_ignore_case(name_sub_backwards_1.lower(), 'p') \
                and CUtils.equal_ignore_case(file_ext.lower(), 'img') \
                and not CFile.find_file_or_subpath_of_path(file_path, match_str_fm, CFile.MatchType_Regex):
            self._object_confirm = self.Object_Confirm_IKnown
            self._object_name = file_main_name
            self.add_file_to_detail_list(file_object_name)
        else:
            self._object_confirm = self.Object_Confirm_IKnown_Not
            self._object_name = None

        return self._object_confirm, self._object_name
Exemple #6
0
    def classified(self):
        """
        设计国土行业数据third_survey_noblock的验证规则(三调影像—非分块)
        完成 负责人 王学谦 在这里检验third_survey_noblock的识别规则
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext  # 初始化需要的参数
        file_path = self.file_info.file_path

        if len(file_main_name) > 6:
            file_name_before_six = file_main_name[0:6]  # 截取前六位行政区划代码
        else:
            return self.Object_Confirm_IUnKnown, self._object_name  # 主名必然大于6

        if not CUtils.text_is_numeric(CUtils.any_2_str(file_name_before_six)):
            return self.Object_Confirm_IUnKnown, self._object_name  # 前六位必然为数字

        # 正则表达式,(?i)代表大小写不敏感,^代表字符串开头,$代表字符串结尾
        # \S用于匹配所有非空字符,+代表匹配前面字符的数量为至少一个,即\S+匹配一个或多个非空字符
        # \d匹配数字,即[0-9],即\d+匹配一个或多个非空字符
        match_str = '(?i)^' + file_name_before_six + r'\S+dom.img$'
        check_file_main_name_exist = CFile.find_file_or_subpath_of_path(
            file_path, match_str, CFile.MatchType_Regex)
        if not check_file_main_name_exist:  # 检查主文件存在性
            return self.Object_Confirm_IUnKnown, self._object_name

        # file_name_before_six_name = ''
        # file_metadata_name = '{0}{1}'.format(file_name_before_six, file_name_before_six_name)
        # file_metadata_name_with_path = CFile.join_file(file_path, file_metadata_name)
        # check_file_mdb_exist = CFile.file_or_path_exist('{0}.mdb'.format(file_metadata_name_with_path))
        # if not check_file_mdb_exist:  # 检查mdb文件存在性
        #     return self.Object_Confirm_IUnKnown, self._object_name
        if len(file_main_name) >= 12:
            name_sub_7_to_8 = file_main_name[6:8]
            name_sub_backwards_3_to_1 = file_main_name[-3:]
            if CUtils.text_is_alpha(name_sub_7_to_8) \
                    and CUtils.equal_ignore_case(CUtils.any_2_str(name_sub_backwards_3_to_1).lower(),
                                                 'dom'):
                if CUtils.equal_ignore_case(file_ext, 'img'):
                    self._object_confirm = self.Object_Confirm_IKnown
                    self._object_name = file_main_name
                    self.add_file_to_detail_list(file_name_before_six)
                else:
                    self._object_confirm = self.Object_Confirm_IKnown_Not
                    self._object_name = None
            else:
                # 运行到此的文件,如果格式为以下,则默认为附属文件
                affiliated_ext_list = [
                    'mdb', 'shp', 'shx', 'dbf', 'sbx', 'prj', 'sbn'
                ]
                if file_ext.lower() in affiliated_ext_list:
                    self._object_confirm = self.Object_Confirm_IKnown_Not
                    self._object_name = None
                else:
                    return self.Object_Confirm_IUnKnown, self._object_name
        else:
            # 运行到此的文件,如果格式为以下,则默认为附属文件
            affiliated_ext_list = [
                'mdb', 'shp', 'shx', 'dbf', 'sbx', 'prj', 'sbn'
            ]
            if file_ext.lower() in affiliated_ext_list:
                self._object_confirm = self.Object_Confirm_IKnown_Not
                self._object_name = None
            else:
                return self.Object_Confirm_IUnKnown, self._object_name

        return self._object_confirm, self._object_name
    def get_sync_mdb_dict_list(self, insert_or_updata) -> list:
        """
                insert_or_updata 中 self.DB_True为insert,DB_False为updata
                本方法的写法为强规则,调用add_value_to_sync_dict_list配置
                第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置
                """
        object_id = self._obj_id
        object_name = self._obj_name
        dsometadataxml_bus = self._dataset.value_by_name(
            0, 'dsometadataxml_bus', '')
        dso_time = self._dataset.value_by_name(0, 'dso_time', '')
        dso_time_json = CJson()  # 时间数据json
        dso_time_json.load_obj(dso_time)
        metadataxml_bus_xml = CXml()  # 业务元数据xml
        metadataxml_bus_xml.load_xml(dsometadataxml_bus)

        sync_dict_list = self.get_sync_predefined_dict_list(insert_or_updata)
        self.add_value_to_sync_dict_list(sync_dict_list, 'aprsdid', object_id)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'aprswid',
            self._dataset.value_by_name(0, 'dsoparentobjid', ''))
        # sync_dict['fname']   #为空
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'fno',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='th']"))
        '''
                object_name[0:1]    100万图幅行号为字母
                object_name[1:3]    100万图幅列号为数字
                object_name[3:4]    比例尺代码为字母
                object_name[4:7]    图幅行号为数字
                object_name[7:10]   图幅列号为数字
                '''
        if CUtils.text_is_alpha(object_name[0:1]):
            self.add_value_to_sync_dict_list(sync_dict_list, 'hrowno',
                                             object_name[0:1])
            self.add_value_to_sync_dict_list(sync_dict_list, 'hcolno',
                                             object_name[1:3])
            self.add_value_to_sync_dict_list(sync_dict_list, 'scalecode',
                                             object_name[3:4])
            self.add_value_to_sync_dict_list(sync_dict_list, 'rowno',
                                             object_name[4:7])
            self.add_value_to_sync_dict_list(sync_dict_list, 'colno',
                                             object_name[7:10])
        # sync_dict['expandextent']  # 为空
        # sync_dict['pupdatedate']  # 为空
        # sync_dict['pversion']  # 为空
        # sync_dict['publishdate']  # 为空
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'dataformat',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='sjgs']"))
        # sync_dict['maindatasource']  # 为空
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'dsometadatajson',
            self._dataset.value_by_name(0, 'dsometadataxml_bus', ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'createrorganize',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='sjscdwm']"))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'submitorganize',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='sjbqdwm']"))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'copyrightorgnize',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='sjcbdwm']"))
        # sync_dict['supplyorganize']  # 为空
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'colormodel',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='yxscms']"))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'piexldepth',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='xsws']"))
        # sync_dict['scale']  # 为空
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'mainrssource',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='wxmc']"))
        # 插件处理字段
        self.add_value_to_sync_dict_list(sync_dict_list, 'datacount', 1)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'secrecylevel',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='mj']"))
        # sync_dict['regioncode']  # 为空
        # sync_dict['regionname']  # 为空
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'resolution',
            metadataxml_bus_xml.get_element_text_by_xpath_one(
                "//item[@name='dmfbl']"))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'imagedate',
            CUtils.to_day_format(dso_time_json.xpath_one('time', ''),
                                 dso_time_json.xpath_one('time', '')))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'begdate',
            CUtils.to_day_format(dso_time_json.xpath_one('start_time', ''),
                                 dso_time_json.xpath_one('start_time', '')))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'enddate',
            CUtils.to_day_format(dso_time_json.xpath_one('end_time', ''),
                                 dso_time_json.xpath_one('end_time', '')))
        return sync_dict_list
    def classified(self):
        """
        设计国土行业数据guoqing_scene_block的验证规则(国情影像—分块),带数字 F-1/F-2
        完成 负责人 王学谦 在这里检验guoqing_scene_block的识别规则
        :return:
        """
        super().classified()
        file_main_name = self.file_info.file_main_name
        file_ext = self.file_info.file_ext  # 初始化需要的参数
        file_path = self.file_info.file_path
        file_object_name = file_main_name[:]  # 这里需要取得规则匹配用的‘对象名’,即去除尾部字母等字符的名

        # 正则表达式,(?i)代表大小写不敏感,^代表字符串开头,$代表字符串结尾
        # [a-z]指匹配所有小写字母,配合(?i)匹配所有字母,{2}代表前面的匹配模式匹配2次,即[a-z]{2}匹配两个字母
        # \d匹配数字,即[0-9],即\d+匹配一个或多个非空字符,\d{4}匹配四个任意数字
        # [0123]一般指匹配一个括号中任意字符,即匹配0到3
        # \S用于匹配所有非空字符,+代表匹配前面字符的数量为至少一个,即\S+匹配一个或多个非空字符
        if len(file_main_name) < 13:
            return self.Object_Confirm_IUnKnown, self._object_name

        if CUtils.text_match_re(file_main_name, r'(?i)^[a-z]{2}\S+'
                                                r'\d{4}[01]\d[0123]\d[a-z][-]\d+$'):  # [a-z][-]\d+$结尾为字母-数字
            # re.findall获取在正则表达式中所加括号,括号中的字符,这里去剔除结尾字母-数字后的字符
            file_object_name_list = re.findall(r'(?i)^([a-z]{2}\S+\d{4}[01]\d[0123]\d)[a-z][-]\d+$',
                                               file_main_name)
            file_object_name = file_object_name_list[0]
        elif CUtils.text_match_re(file_main_name, r'(?i)^[a-z]{2}\S+'  # 尾部只有单个字母的情况
                                                  r'\d{4}[01]\d[0123]\d[FMP]$') and \
                CUtils.equal_ignore_case(file_ext.lower(), 'img'):
            return self.Object_Confirm_IUnKnown, self._object_name
        elif CUtils.text_match_re(file_main_name, r'(?i)^[a-z]{2}\S+'  # 尾部只有单个字母的情况
                                                  r'\d{4}[01]\d[0123]\d[a-z]$'):
            file_object_name = file_main_name[:-1]
        # 下面正则:开头两个字母,字母后任意数量字符,而后匹配8位时间,4位任意数字(年份),[01]\d为月份,[0123]\d日
        elif CUtils.text_match_re(file_main_name, r'(?i)^[a-z]{2}\S+'  # 尾部没字母取原本主名
                                                  r'\d{4}[01]\d[0123]\d$'):
            pass
        elif CUtils.text_match_re(file_main_name, r'(?i)^[a-z]{2}\S+'  # 尾部无字母,但是有任意附加字符的情况
                                                  r'\d{4}[01]\d[0123]\d\S+$'):
            file_object_name_list = re.findall(r'(?i)^([a-z]{2}\S+\d{4}[01]\d[0123]\d)\S+$',
                                               file_main_name)
            file_object_name = file_object_name_list[0]

        match_str = '(?i)^' + file_object_name + r'[FMP][-]\d+.img$'
        check_file_main_name_exist = \
            CFile.find_file_or_subpath_of_path(file_path, match_str, CFile.MatchType_Regex)
        if not check_file_main_name_exist:  # 检查主文件存在性
            return self.Object_Confirm_IUnKnown, self._object_name

        """文件名第1-2位为字母,倒数1-3位是在F-1/P-1/M-1中,倒数4-11位是数字"""
        name_sub_1_to_2 = file_object_name[0:2]
        name_sub_backwards_11_to_4 = file_object_name[-8:]
        if CUtils.text_is_alpha(name_sub_1_to_2) is False \
                or CUtils.text_is_numeric(name_sub_backwards_11_to_4) is False:
            return self.Object_Confirm_IUnKnown, self._object_name
        # 取得尾部的字母
        name_sub_backwards_fmp_list = re.findall(r'(?i)^[a-z]{2}\S+\d{4}[01]\d[0123]\d([a-z])[-]\d+$',
                                                 file_main_name)
        # 取得尾部的数字
        name_sub_backwards_num_list = re.findall(r'(?i)^[a-z]{2}\S+\d{4}[01]\d[0123]\d[a-z][-](\d+)$',
                                                 file_main_name)
        # 如果尾部没有数字与字母,但是已经通过前面的过滤,则默认为附属文件
        if len(name_sub_backwards_fmp_list) > 0 and len(name_sub_backwards_num_list) > 0:
            name_sub_backwards_fmp = name_sub_backwards_fmp_list[0]
            name_sub_backwards_num = name_sub_backwards_num_list[0]
            match_str_f = '(?i)^' + file_object_name + r'[F][-][' + name_sub_backwards_num + '].img$'
            match_str_fm = '(?i)^' + file_object_name + r'[FM][-][' + name_sub_backwards_num + '].img$'
            # 作为对象的主文件存在优先级,F-M-P,比如需要F的文件不存在,M才能是主文件
            if CUtils.equal_ignore_case(name_sub_backwards_fmp.lower(), 'f') \
                    and CUtils.equal_ignore_case(file_ext.lower(), 'img'):
                self._object_confirm = self.Object_Confirm_IKnown
                self._object_name = file_main_name
                self.add_file_to_detail_list(file_object_name, name_sub_backwards_num)
            elif CUtils.equal_ignore_case(name_sub_backwards_fmp.lower(), 'm') \
                    and CUtils.equal_ignore_case(file_ext.lower(), 'img') \
                    and not CFile.find_file_or_subpath_of_path(file_path, match_str_f, CFile.MatchType_Regex):
                self._object_confirm = self.Object_Confirm_IKnown
                self._object_name = file_main_name
                self.add_file_to_detail_list(file_object_name, name_sub_backwards_num)
            elif CUtils.equal_ignore_case(name_sub_backwards_fmp.lower(), 'p') \
                    and CUtils.equal_ignore_case(file_ext.lower(), 'img') \
                    and not CFile.find_file_or_subpath_of_path(file_path, match_str_fm, CFile.MatchType_Regex):
                self._object_confirm = self.Object_Confirm_IKnown
                self._object_name = file_main_name
                self.add_file_to_detail_list(file_object_name, name_sub_backwards_num)
            else:
                self._object_confirm = self.Object_Confirm_IKnown_Not
                self._object_name = None
        else:
            self._object_confirm = self.Object_Confirm_IKnown_Not
            self._object_name = None

        return self._object_confirm, self._object_name