必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-10-03 07:15:48来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

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()

相关阅读

Windows系统:解析文件句柄Handle的详细机制

1. 用户程序和运行库层面的文件”句柄” FILE* IO初始化时讨论了在运行库层面的文件句柄管理机制,工作流程如下FILE *file ->inin

【NOIP 2017PJ】跳房子

题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。跳房子的游戏规则如下:在地面上确定一个起点,

从媒体开拓者到投资人,来听戴自更解析传媒产业创投趋势

价值君注:近期我们会陆续推荐钛媒体用一年时间,深耕产业,挖掘出来的真正具有产业变革意义的独角兽领军者、以及具有前瞻力的投资人和

爬虫福利一 之 27报网MM

《 爬虫福利二 》 https://blog.csdn.net/PY0312 刚学爬虫花了4个小时写的,每一步备注的都很清楚,喜欢的朋友自己可以研究研究.

使用Java解析excel

使用Java解析excel 由于工作原因需要解析excel表格的内容。于是,我决定利用Apache POI的支持库,用java程序解析Excel表。本文将讲解

分享到:

栏目导航

推荐阅读

热门阅读