如何迭代.text文件中的x行数

时间:2013-12-07 20:04:11

标签: python python-3.x

我正在尝试编写一个程序来对文件中的行进行排序和标记。例如,假设我有一个健康诊所的.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>

非常感谢任何帮助。

1 个答案:

答案 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用完时,它不再占用任何行,但文件对象会记住它在下一次读取时的位置。