用于将XML格式的HL7(2.x版)消息解析为Python对象的库
python-xml-hl7的Python项目详细描述
python-xml-hl7
用于将XML格式的HL7(2.x版)消息解析为Python对象的库
安装
您可以使用pip:
pip install python-xml-hl7
或者从git存储库:
git clone https://github.com/weynelucas/python-xml-hl7.git
cd python-xml-hl7
python setup.py install
快速启动
例如,让我们创建一个hl7消息:
message="""<ORU_R01><MSH><MSH.1>|</MSH.1><MSH.2>^~\\&</MSH.2><MSH.3>hospital</MSH.3><MSH.7>20180703111743</MSH.7><MSH.9><MSH.9.1>ORU</MSH.9.1><MSH.9.2>R01</MSH.9.2></MSH.9><MSH.12>2.3.1</MSH.12></MSH><PID><PID.2>shenzhen</PID.2><PID.3>1</PID.3><PID.5>libang</PID.5><PID.7>20091010</PID.7><PID.8>M</PID.8></PID><PV1><PV1.2>U</PV1.2><PV1.18>adult</PV1.18><PV1.44>20180726181346</PV1.44></PV1><OBR><OBR.7>20180703111743</OBR.7></OBR><OBX><OBX.2>NM</OBX.2><OBX.3>SPO2</OBX.3><OBX.5>96</OBX.5><OBX.6>%</OBX.6><OBX.7>90-100</OBX.7></OBX><OBX><OBX.2>NM</OBX.2><OBX.3>PR</OBX.3><OBX.5>68</OBX.5><OBX.6>bpm</OBX.6><OBX.7>50-120</OBX.7></OBX><OBX><OBX.2>NM</OBX.2><OBX.3>SYS</OBX.3><OBX.5>131</OBX.5><OBX.6>mmHg</OBX.6><OBX.7>90-160</OBX.7><OBX.14>20180703111713</OBX.14></OBX><OBX><OBX.2>NM</OBX.2><OBX.3>DIA</OBX.3><OBX.5>85</OBX.5><OBX.6>mmHg</OBX.6><OBX.7>50-90</OBX.7><OBX.14>20180703111713</OBX.14></OBX><OBX><OBX.2>NM</OBX.2><OBX.3>MAP</OBX.3><OBX.5>100</OBX.5><OBX.6>mmHg</OBX.6><OBX.7>60-110</OBX.7><OBX.14>20180703111713</OBX.14></OBX><OBX><OBX.2>NM</OBX.2><OBX.3>NIBP_PR</OBX.3><OBX.5>73</OBX.5><OBX.6>bpm</OBX.6><OBX.7>50-120</OBX.7><OBX.14>20180703111713</OBX.14></OBX></ORU_R01>"""
调用hl7.xml.parse()
命令转换字符串消息
fromhl7.xmlimportparseh=parse(message)
此命令返回一个Message
实例,包装一系列Segment
对象。是否可以在段上迭代或匹配特定的段:
>>>list(h)# List all message segments[<hl7.xml.containers.MSH>,<hl7.xml.containers.PID>,<hl7.xml.containers.PV1>,<hl7.xml.containers.OBR>,<hl7.xml.containers.OBX:SPO2>,<hl7.xml.containers.OBX:PR>,<hl7.xml.containers.OBX:SYS>,<hl7.xml.containers.OBX:DIA>,<hl7.xml.containers.OBX:MAP>,<hl7.xml.containers.OBX:NIBP_PR>]>>>h[0]# Get 1st message segment<hl7.xml.containers.MSH>>>>h['OBX']# Find all OBX segments[<hl7.xml.containers.OBX:SPO2>,<hl7.xml.containers.OBX:PR>,<hl7.xml.containers.OBX:SYS>,<hl7.xml.containers.OBX:DIA>,<hl7.xml.containers.OBX:MAP>,<hl7.xml.containers.OBX:NIBP_PR>]
一个Segment
实例包装了一系列Field
对象,您可以对它们进行迭代:
>>>list(h[2])# List all fields for 3rd message segment (PV1)[<hl7.xml.containers.Field:PV1.2>,<hl7.xml.containers.Field:PV1.18>,<hl7.xml.containers.Field:PV1.44>]>>>list(h[5])# List all fields for 6th message segment (OBX)[<hl7.xml.containers.Field:OBX.2>,<hl7.xml.containers.Field:OBX.3>,<hl7.xml.containers.Field:OBX.5>,<hl7.xml.containers.Field:OBX.6>,<hl7.xml.containers.Field:OBX.7>]>>>h[5][0].value'NM'>>>h[5][2].value'62'
有不同类型的Segment
,它们是:MSH
,PID
,PV1
,OBR
和OBX
。它们中的每一个都有helper方法来从其各自的hl7段检索数据,而无需迭代其Field
对象
msh
>>>msh=h['MSH'][0]>>>(msh.field_separator,msh.encoding_chars,msh.sending_application,msh.datetime,msh.version,msh.message_type)('|','^~\\&','hospital',datetime.datetime(2018,7,3,11,17,43),'2.3.1',('ORU','R01'))
PID
>>>pid=h['PID'][0]>>>(pid.id,pid.id_list,pid.name,pid.birthdate,pid.gender)('shenzhen','1','libang',datetime.datetime(2009,10,10,0,0),'M')
pv1
>>>pv1=h['PV1'][0]>>>(pv1.patient_class,pv1.patient_class_display,pv1.patient_type,pv1.patient_type_display,pv1.assigned_patient_location,pv1.admit_datetime)('U','Unknown','adult','Adult',None,datetime.datetime(2018,7,26,18,13,46))
obr
>>>obr=h['OBR'][0]>>>obr.datetimedatetime.datetime(2018,7,3,11,17,43)
obx
>>>obx=h['OBX'][3]# 4th OBX instance>>>(obx.identifier,obx.value_type,obx.value,obx.units,obx.reference_range,obx.datetime)('DIA','NM',85,'mmHg',(50,90),datetime.datetime(2018,7,3,11,17,13))
要通过标识符在Message
中查找OBX
段或值,请使用get_obx
和get_obx_value
方法:
>>>h.get_obx('DIA')<hl7.xml.containers.OBX:DIA>>>>h.get_obx('DIA').value85>>>h.get_obx_value('SPO2')96
网络客户端
python-xml-hl7
提供一个简单的网络(tcp/ip)客户端,它从Alfamed病人监视器(如VITA 200e)读取hl7消息
fromhl7.xml.clientimportAlfamedClientclient=AlfamedClient('169.254.215.35')# Default communication port is 9100client.read_message()# By default, HL7 messages are converted into Message objectsclient.read_message(parse_message=False)# Returns the original HL7 message as string
AlfamedClient
用无效主机地址实例化的对象将引发AttributeError
测试
您可以使用unittest
模块在本地运行测试
cd python-xml-hl7
python -m unittest tests
如果所有测试都通过,您将看到如下成功消息:
.................
----------------------------------------------------------------------
Ran 17 tests in 0.007s
OK
注释
- hl7 v2消息的xml编码规则规范可以找到here
- 对于任何建议、功能或错误修复,都可以报告问题here。或提交拉取请求
- 对于以原始流格式处理HL7消息,请使用诸如python-hl7或HL7apy
发行说明
- 1.0.0-首次发布
- 1.1.0-使用
get_obx
和get_obx_value
查找 - 1.2.0-客户端和容器对象的字符串表示法
- 1.3.0-添加travis和codecov支持
OBX
段