我正在尝试编写一个程序来对文件中的行进行排序和标记。例如,假设我有一个健康诊所的.txt文件,其中包含有关患者的各种信息。我想标记信息。假设数据按以下顺序给出:
Patient ID
Age
Gender
Height
Weight
HBA1C level
Cholesterol
Smoker status
Systolic BP
Diastolic BP
并假设该文件包含以下信息(所有这些信息都已组成):
A31415
54
M
180
90
6.7
100
No
130
65
A32545
62
F
160
80
7.2
120
Yes
180
92
我的问题是尝试为每位患者写一个循环,
A31415
54
M
180
90
6.7
100
No
130
65
是一名病人
A32545
62
F
160
80
7.2
120
Yes
180
92
成为第二个。我正在努力让代码产生以下结果:
<patient>
<patientID> A31415 </patientID>
<clinic> UIHC </clinic>
<age> 54 </age>
<gender> M </gender>
<height> 180 </height>
<weight> 90 </weight>
<hba1c> 6.7 </hba1c>
<cholesterol> 100 </cholesterol>
<smoker> No <smoker>
<systolic> 130 </systolic>
<diastolic> 65 </diastolic>
</patient>
<patient>
<patientID> A32545 </patientID>
<clinic> UIHC </clinic>
<age> 62 </age>
<gender> F </gender>
<height> 160 </height>
<weight> 80 </weight>
<hba1c> 7.2 </hba1c>
<cholesterol> 120 </cholesterol>
<smoker> Yes </smoker>
<systolic> 180 </systolic>
<diastolic> 92 </diastolic>
</patient>
非常感谢任何帮助。
答案 0 :(得分:4)
这似乎很可行。我觉得这样的事情应该有用......
file_keys = ['Patient ID', 'Age', 'Gender',
'Height', 'Weight', 'HBA1C level'
'Cholesterol', 'Smoker status',
'Systolic BP', 'Diastolic BP']
with open('datafile') as fin:
user_info = dict(zip(file_keys, fin))
# Now process user_info into your xml
当然,这只需要文件中的一个用户。为了得到它们,你需要一个循环。一旦user_info
返回的是一个空字典,你就会知道你拥有所有用户。
with open('datafile') as fin:
while True:
user_info = dict(zip(file_keys, fin))
if not user_info: # empty dict. we're done.
break
# Now process user_info into your xml
这可行的原因是因为zip
将在两个输入迭代中较短的一个截断。换句话说,它需要来自file_keys
的1个元素,并将其与文件中的1行匹配。当file_keys
用完时,它不再占用任何行,但文件对象会记住它在下一次读取时的位置。