Create XML file with python by iterating over lists -
i trying xml file looks can import moodle gradebook:
<results> <result> <student>1</student> <assignment>100</assignment> <score>0</score> </result> <result> <student>1</student> <assignment>101</assignment> <score>4</score> </result> <result> <student>1</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>100</assignment> <score>0</score> </result> <result> <student>2</student> <assignment>101</assignment> <score>4</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> </results> i have tried write code in python, , after poring on documentation, best can come is:
import xml.etree.celementtree et students = [1,2] assignments=[100,101,102] scores=[0,4,10] results = et.element("results") result = et.subelement(results,"result") student = et.subelement(result,"student") assignment = et.subelement(result,"assignment") score = et.subelement(result,"score") s in students: in range(len(assignments)): student.text = str(s) assignment.text = str(assignments[a]) score.text = str(scores[a]) results.append(result) tree = et.elementtree(results) tree.write('test.xml') this gives me want, last entry seems overwrite previous entries shown:
<results> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> <result> <student>2</student> <assignment>102</assignment> <score>10</score> </result> </results> i have tried find solution, seems of questions address writing xml file distinct elements. can't figure out how use same element tag assign distinct values each one.
you need 2 things:
- move lines eli suggested loop.
- remove line:
results.append(result)loop.subelementfactory takes first argument parent element (as know) , appends newly created instance parent. therefore don't need append again (you won't error, different set of results ones specified).
you loop should like:
for s in students: in range(len(assignments)): result = et.subelement(results,"result") student = et.subelement(result,"student") assignment = et.subelement(result,"assignment") score = et.subelement(result,"score") student.text = str(s) assignment.text = str(assignments[a]) score.text = str(scores[a])
Comments
Post a Comment