我有一个生成xml数据的Python脚本(2.7)。但是,对于我的数组中的每个对象,我需要它来生成一个以1开头的新序列号。
下面的示例(请参阅sequenceOrder标记):
<objectArray>
<object>
<title>Title</title>
<sequenceOrder>1</sequenceOrder>
</object>
<object>
<title>Title</title>
<sequenceOrder>2</sequenceOrder>
</object>
<object>
<title>Title</title>
<sequenceOrder>3</sequenceOrder>
</object>
</objectArray>
使用Python 2.7,如何让我的脚本为我的xml数组中每个对象的sequenceOrder部分生成一个新数字(前面数字的+1)?
请注意,我的阵列中将有数十万个对象,因此需要考虑。
我对Python /编码一般都是新手,所以任何帮助都表示赞赏!很高兴在必要时提供额外的信息。
答案 0 :(得分:0)
如果要创建自己序列化的对象,可以使用itertools.count获取连续的唯一整数。
以一种非常抽象的方式,它看起来像:
import itertools
counter = itertools.count()
o = create_object()
o.sequentialNumber = next(counter)
o2 = create_another_object()
o.sequentialNumber = next(counter)
create_xml_doc(my_objects)
答案 1 :(得分:0)
是的,您可以为每个XML元素生成新的序列号。以下是使用lxml
生成示例输出的方法:
import lxml.etree as et
root = et.Element('objectArray')
for i in range(1, 4):
obj = et.Element('object')
title = et.Element('title')
title.text = 'Title'
obj.append(title)
sequenceOrder = et.Element('sequenceOrder')
sequenceOrder.text = str(i)
obj.append(sequenceOrder)
root.append(obj)
print et.tostring(root, pretty_print=True)
答案 2 :(得分:0)
一位同事提供了解决方案:
组
sequence_order = 1
然后在xml中
<sequenceOrder>""" + str(sequence_order) + """</sequenceOrder>
然后再
if test is False:
with open('uniquetest.csv', 'a') as write:
writelog = csv.writer(write, delimiter= '\t', quoting=csv.QUOTE_ALL)
writelog.writerow( (title, ) )
try:
f = open(file + '_output.xml', 'r')
f = open(file + '_output.xml', 'a')
f.write(DASxml_bottom + DASxml_top + digital_objects)
f.close()
sequence_order = sequence_order + 1
# f = open('log.txt', 'a')
# f.write(title + str(roll) + label_flag + str(id) + str(file_size) + file_path + """
# """)
# f.close()
由于我没有提供完整的脚本,因此对某些人来说没有任何意义,但它可以用于我的目的!谢谢大家的建议