我正在尝试使用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>
所以我的问题是如何在文件中写下一行,而不是重复。 任何帮助,将不胜感激。是的,所有信息都完全弥补了。
答案 0 :(得分:2)
使用for index, line in enumerate(original)
来迭代您的输入,而无需自己跟踪索引。
访问当前line
for循环,而不是使用(尤其是硬编码)索引,例如original[0]
。
一旦所有内容都按照您的意愿运行,您可能需要考虑使用XML标记的列表或字典,而不是现在使用的if
长列表。