将输出保存(打印)为 xml 文件不起作用

Save (print) output as a xml file doesnt work

我写了一个小程序,用一个函数逐行读取 csv 文件。 然后将输出结构保存在一个变量中。然后我想打开一个 xml 文件并将我的输出与变量一起传递。不知何故,当我打开保存的文件时,并没有保存整个输出。

import pandas as pd
df = pd.read_csv('mytests.csv', sep=',')

def csv_to_xml(row):
    return """  <Test Testname="%s">
        <Health_Feat>%s</Health_Feat>
        <Result>%s</Result>
  </Test>""" % (row.test_name, row.health_feat, row.result)
for index, row in df.iterrows():
   xml_1 = (csv_to_xml(row))
   print(xml_1)

f = open("new_xml_1.xml","w+")
f.write(xml_1)    
f.close() 

我在打印时得到了这个输出 xml_1

  <Test Testname="test_1">
        <Health_Feat>20</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_2">
        <Health_Feat>23</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_3">
        <Health_Feat>24</Health_Feat>
        <Result>0</Result>
  </Test>
  <Test Testname="test_3">
        <Health_Feat>30</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_4">
        <Health_Feat>12</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_5">
        <Health_Feat>45</Health_Feat>
        <Result>0</Result>
  </Test>
  <Test Testname="test_6">
        <Health_Feat>34</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_7">
        <Health_Feat>78</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_8">
        <Health_Feat>23</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_9">
        <Health_Feat>12</Health_Feat>
        <Result>1</Result>
  </Test>
  <Test Testname="test_10">
        <Health_Feat>12</Health_Feat>
        <Result>2</Result>
  </Test>

但是当我打开 "new_xml_1.xml" 文件时,我只得到

  <Test Testname="test_10">
        <Health_Feat>12</Health_Feat>
        <Result>2</Result>
  </Test>

我真的不知道为什么我的程序表现如此奇怪。我认为它与循环到 csv

的行有关

感谢您的帮助。我是 Python 和编程的新手,所以我想获得一些经验。

它只保存最后一个输出,因为你在 for 循环之后保存外部变量 xml_1,它只有最后一个输出。在循环之前打开文件,并在循环内写入,就像在循环内打印一样。

f = open("new_xml_1.xml","w+")

for index, row in df.iterrows():
   xml_1 = (csv_to_xml(row))
   print(xml_1)
   f.write(xml_1)

f.close() 

变量xml_1 包含循环执行后的最后一行数据。您必须将将变量写入文件的代码移动到循环中,或者捕获列表中的每一行,然后将该列表写入文件。下面的代码片段实现了前一种方法:

import pandas as pd
df = pd.read_csv('mytests.csv', sep=',')

def csv_to_xml(row):
    return """  <Test Testname="%s">
        <Health_Feat>%s</Health_Feat>
        <Result>%s</Result>
  </Test>""" % (row.test_name, row.health_feat, row.result)

with open("new_xml_1.xml","w+") as f:
   for index, row in df.iterrows():
      xml_1 = (csv_to_xml(row))
      print(xml_1)
      f.write(xml_1)