Saya melakukan beberapa pekerjaan parse dengan hl7apy parse, dan saya mengalami satu masalah.
Saya menggunakan hl7apy untuk mengurai pesan hl7, yang dapat diurai:

from hl7apy.parser import parse_message
message = "MSH|^~\&|HIS|HIS|MediII|MediII|20170902141711||ORM^O01^ORM_O01|15b 37e7132504a0b95ade4654b596dc5|P|2.4\r"
msg = parse_message(message, find_groups=False)
print(msg.msh.msh_3.msh_3_1.value)

Keluaran:

'HIS'

Jadi, bagaimana saya bisa mendapatkan nilai field secara dinamis sesuai dengan field config?
misalnya, konfigurasi bidang msh :

{
    "field": "msh",
    "field_index": [3,1]
}

Sehingga nilainya dapat ditemukan dengan:

msg.msh.msh_3.msh_3_1.value

Dan jika konfigurasi berubah menjadi:

{
    "field": "pid",
    "field_index": [2,4]
}

Garis bidang get akan menjadi:

msg.pid.pid_2.pid_2_4.value
0
GuiHva 12 Mei 2021, 17:42

1 menjawab

Jawaban Terbaik

Anda dapat menggabungkan beberapa pemahaman list dan menggunakan getattr secara rekursif.

# recursively get the methods from a list of names
def get_method(method, names):
    if names:
        return get_method(getattr(method, names[0]), names[1:])
    return method

field_config = {
    'field': 'msh',
    'field_index': [3, 1]
}
# just get the field
field = field_config['field']
# get a list of the indexes as string. ['3', '1']
indexes = [str(i) for i in field_config['field_index']]
# join the indexes with a '_' starting with nothing
# and put it in a list of names. ['msh', 'msh_3', 'msh_3_1']
names = ['_'.join([field] + indexes[:i]) for i in range(len(indexes) + 1)]
# get the method from the recursive function
method = get_method(msg, names)
print(method.value)

Sebagai penafian, saya tidak memiliki cara untuk mengujinya sehingga mungkin tidak berfungsi persis seperti yang Anda harapkan. Tapi ini harus menjadi titik awal yang baik.

0
Axe319 12 Mei 2021, 15:28