如何读取 python 中竖线分隔文件中的所有行?
How to read all the lines in a pipe delimited file in python?
我正在使用 hl7apy 创建一个 python 脚本来使用竖线分隔文件中的数据生成 hl7 消息。
我的输入文件是这样的
John|Doe|Facility
Smith|Doe1|Test_Facility
我从 hl7apy 库中获取示例并进行了一些更改以从管道分隔文件中读取。在代码中,我将文件中第二个字段的值分配给 PID.5.1 段,并期望输出两条消息,因为我的输入文件中有两行。
代码
from hl7apy.core import Message
from hl7apy.parser import parse_message
fileHandle = open('test_pipe.txt', 'r')
for line in fileHandle:
fields = line.split('|')
m = Message("ADT_A01")
m.msh.msh_3 = 'GHH_ADT'
m.msh.msh_7 = '20080115153000'
m.msh.msh_9 = 'ADT^A01^ADT_A01'
m.msh.msh_10 = "0123456789"
m.msh.msh_11 = "P"
m.msh.msh_12 = ""
m.msh.msh_16 = "AL"
m.evn.evn_2 = m.msh.msh_7
m.evn.evn_4 = "AAA"
m.evn.evn_5 = m.evn.evn_4
m.pid.pid_5.pid_5_1 = fields[1]
m.nk1.nk1_1 = '1'
m.nk1.nk1_2 = 'NUCLEAR^NELDA^W'
m.nk1.nk1_3 = 'SPO'
m.nk1.nk1_4 = '2222 HOME STREET^^ANN ARBOR^MI^^USA'
print (m.value)
fileHandle.close()
当我 运行 这段代码时,我在输出中只得到一条消息,第二行中第二个字段 (Doe1) 的值,而不是输出中的两条消息,第二个字段的值在两行中。如何让这段代码读取文件中的所有行?
因为fields
在for循环中被覆盖
你或许可以改变
for line in fileHandle:
fields = line.split('|')
到
fields = [line.split('|') for line in fileHandle]
或者您可以更改其余代码的缩进
for line in fileHandle:
fields = line.split('|')
m = Message("ADT_A01")
m.msh.msh_3 = 'GHH_ADT'
m.msh.msh_7 = '20080115153000'
m.msh.msh_9 = 'ADT^A01^ADT_A01'
m.msh.msh_10 = "0123456789"
m.msh.msh_11 = "P"
m.msh.msh_12 = ""
m.msh.msh_16 = "AL"
m.evn.evn_2 = m.msh.msh_7
m.evn.evn_4 = "AAA"
m.evn.evn_5 = m.evn.evn_4
m.pid.pid_5.pid_5_1 = fields[1]
m.nk1.nk1_1 = '1'
m.nk1.nk1_2 = 'NUCLEAR^NELDA^W'
m.nk1.nk1_3 = 'SPO'
m.nk1.nk1_4 = '2222 HOME STREET^^ANN ARBOR^MI^^USA'
print (m.value)
我正在使用 hl7apy 创建一个 python 脚本来使用竖线分隔文件中的数据生成 hl7 消息。
我的输入文件是这样的
John|Doe|Facility
Smith|Doe1|Test_Facility
我从 hl7apy 库中获取示例并进行了一些更改以从管道分隔文件中读取。在代码中,我将文件中第二个字段的值分配给 PID.5.1 段,并期望输出两条消息,因为我的输入文件中有两行。
代码
from hl7apy.core import Message
from hl7apy.parser import parse_message
fileHandle = open('test_pipe.txt', 'r')
for line in fileHandle:
fields = line.split('|')
m = Message("ADT_A01")
m.msh.msh_3 = 'GHH_ADT'
m.msh.msh_7 = '20080115153000'
m.msh.msh_9 = 'ADT^A01^ADT_A01'
m.msh.msh_10 = "0123456789"
m.msh.msh_11 = "P"
m.msh.msh_12 = ""
m.msh.msh_16 = "AL"
m.evn.evn_2 = m.msh.msh_7
m.evn.evn_4 = "AAA"
m.evn.evn_5 = m.evn.evn_4
m.pid.pid_5.pid_5_1 = fields[1]
m.nk1.nk1_1 = '1'
m.nk1.nk1_2 = 'NUCLEAR^NELDA^W'
m.nk1.nk1_3 = 'SPO'
m.nk1.nk1_4 = '2222 HOME STREET^^ANN ARBOR^MI^^USA'
print (m.value)
fileHandle.close()
当我 运行 这段代码时,我在输出中只得到一条消息,第二行中第二个字段 (Doe1) 的值,而不是输出中的两条消息,第二个字段的值在两行中。如何让这段代码读取文件中的所有行?
因为fields
在for循环中被覆盖
你或许可以改变
for line in fileHandle:
fields = line.split('|')
到
fields = [line.split('|') for line in fileHandle]
或者您可以更改其余代码的缩进
for line in fileHandle:
fields = line.split('|')
m = Message("ADT_A01")
m.msh.msh_3 = 'GHH_ADT'
m.msh.msh_7 = '20080115153000'
m.msh.msh_9 = 'ADT^A01^ADT_A01'
m.msh.msh_10 = "0123456789"
m.msh.msh_11 = "P"
m.msh.msh_12 = ""
m.msh.msh_16 = "AL"
m.evn.evn_2 = m.msh.msh_7
m.evn.evn_4 = "AAA"
m.evn.evn_5 = m.evn.evn_4
m.pid.pid_5.pid_5_1 = fields[1]
m.nk1.nk1_1 = '1'
m.nk1.nk1_2 = 'NUCLEAR^NELDA^W'
m.nk1.nk1_3 = 'SPO'
m.nk1.nk1_4 = '2222 HOME STREET^^ANN ARBOR^MI^^USA'
print (m.value)