如何将文本文件中的下一行写入新文本文件

时间:2013-12-10 00:37:02

标签: python xml text-files

我正在尝试使用XML标记对文本文件中的数据进行排序。我知道所有的库,但这不是我想要做的方式。如果我的文件是:

UIHC
2
A31415
54
M
180
98
6.7
100
No
130
65
A32545
62
F
160
80
7.2
120
Yes
180
92

我需要输出看起来像:

<patient>       
<patientID>A31415</patientID>   
<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>       
<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>

我的代码是:

def codeData(filename):
    newFile = filename
    newFile = newFile.replace(".txt", "")
    newFile = str(newFile) + "XML.txt"    
    originalFile = open(filename,'r')    
    firstLine  = originalFile.readline()
    secondLine = originalFile.readline()
    original = originalFile.readlines()
    index = 0
    file = open(newFile, 'w')
    for line in original:
        index = index + 1
        if index%11 == 1:
            file.write('<patientID>'+str(original[0]).strip('\n')+'</patientID>\n')
        if index%11 == 2:
            file.write('<age>'+str(original[1]).strip('\n')+'</age>\n')
        if index%11 == 3:
            file.write('<gender>'+str(original[2]).strip('\n')+'</gender>\n')
        if index%11 == 4:
            file.write('<height>'+str(original[3]).strip('\n')+'</height>\n')
        if index%11 == 5:
            file.write('<weight>'+str(original[4]).strip('\n')+'</weight>\n')
        if index%11 == 6:
            file.write('<HBA1C>'+str(original[5]).strip('\n')+'</HBA1C>\n')
        if index%11 == 7:
            file.write('<cholesterol>'+str(original[6]).strip('\n')+'</cholesterol>\n')
        if index%11 == 8:
            file.write('<smoker>'+str(original[7]).strip('\n')+'</smoker>\n')
        if index%11 == 9:
            file.write('<systolic>'+str(original[8]).strip('\n')+'</systolic>\n')
        if index%11 == 10:
            file.write('<diastolic>'+str(original[9]).strip('\n')+'</diastolic>\n')

但是使用此代码,我的输出只重复了一位患者。我知道这是因为我指的是写一个特定的行。我的输出是:

<patientID>A31415</patientID>
<age>54</age>
<gender>M</gender>
<height>180</height>
<weight>98</weight>
<HBA1C>6.7</HBA1C>
<cholesterol>100</cholesterol>
<smoker>No</smoker>
<systolic>130</systolic>
<diastolic>65</diastolic>
<patientID>A31415</patientID>
<age>54</age>
<gender>M</gender>
<height>180</height>
<weight>98</weight>
<HBA1C>6.7</HBA1C>
<cholesterol>100</cholesterol>
<smoker>No</smoker>
<systolic>130</systolic>

所以我的问题是如何在文件中写下一行,而不是重复。 任何帮助,将不胜感激。是的,所有信息都完全弥补了。

1 个答案:

答案 0 :(得分:2)

  1. 使用for index, line in enumerate(original)来迭代您的输入,而无需自己跟踪索引。

  2. 访问当前line for循环,而不是使用(尤其是硬编码)索引,例如original[0]

  3. 一旦所有内容都按照您的意愿运行,您可能需要考虑使用XML标记的列表或字典,而不是现在使用的if长列表。