解析Hl7消息,将消息可视化

测试接口,传参文件为JSON 内嵌HL7。因为HL7的书写规范,查看Hl7如果不结构化,分分钟能把眼看瞎的节奏,搜了下Python竟然有Hl7库,借助该库写了一个简单的脚本,将Hl7消息可视化输出,先将参数文件写入临时文件,然后分析该文件。应该是So easy 只是简单的记录下。其中遇到了body中传两个Hl7消息的情况,只是将每个元素视作对象即可,一开始当做元素来处理,结果一直报错。

import hl7
import json,os
path = r'D:\Code\AutoTest\venv\Hl7\Hl7File'
path2 = r'D:\Code\AutoTest\venv\Hl7\Hl7File2'
class TransHl7File():
    def GetCode(self):
        CodeTmp = open(path, 'rb')
        TTmp=json.load(CodeTmp)['Request']['Head']
        # EventCode = json.load(CodeTmp)['Request']['Head']['EventCode']
        # TranCode = json.load(CodeTmp)['Request']['Head']['EventCode']  #直接取值有报错,待查原因
        EventCode=TTmp['EventCode']
        TranCode=TTmp['TranCode']
        CodeTmp.closed  #关闭文件
        return (EventCode,TranCode)

    def ViewHl7Msg(self):
        (Ecode,Tcode) = self.GetCode()
        if Ecode == Tcode:   #判断服务代码是否一致,不一致则直接退出
            print('服务代码: ',Ecode)
        else:
            print('服务代码不一致')
            os._exit(0)

        Hl7FileJson = open(path, 'rb')
        Hl7Tmp = json.load(Hl7FileJson)['Request']['Body']  #获取body中的Hl7消息
        if isinstance(Hl7Tmp,list):  #处理当传递多条Hl7消息的情况
            print('\nWarring :本条消息有',len(Hl7Tmp),'条Hl7消息----')
            i = 0
            while i < len(Hl7Tmp):
                print('\n-------第 ', i + 1, ' 条消息-----------')
                Hl7Res = hl7.parse(Hl7Tmp[i])
                self.Hl7Pub(Hl7Res)
                i += 1
        else:
            Hl7Res = hl7.parse(Hl7Tmp)
            self.Hl7Pub(Hl7Res)
        Hl7FileJson.closed

    def Hl7Pub(self,Hl7Res):
        for item in Hl7Res:
            MsgTitle=str(item).split('|', 1)[0]  #获取消息段名称
            if MsgTitle =='NTE':  #过滤不必要字段
                continue
            elif MsgTitle =='MSH':  #首字段特殊处理
                i = 1
                # print(str(item).split('|',1)[0])
                print('Message :',str(item))
                for value in str(item).split('|'):   #拆分消息
                    if value !='':   #过滤空值
                        print(MsgTitle,': 第',i,'位数据为:',value)
                    i=i+1
            else:
                i = 0
                print('\nMessage :',str(item))
                for value in str(item).split('|'):
                    if value !='':
                        print(MsgTitle,': 第',i,'位数据为:',value)
                    if '~' in value:
                        for vi in value.split('~'):   #处理list型数据
                            print(vi)
                            x = 1
                            if  '^' in vi:   #处理多数据情况
                                for v1 in vi.split('^'):
                                    print('------该子集第', x, '位数据为:', v1)
                                    x=x+1
                    elif '^' in value:
                        y=1
                        for v2 in value.split('^'):
                            if v2 !='':
                                print('------该子集第', y, '位数据为:', v2)
                            y = y + 1
                    i = i + 1

if __name__ == '__main__':
    Trans = TransHl7File()
    # Trans.GetCode()
    Trans.ViewHl7Msg()

 

你可能感兴趣的:(Python,数据)