如何在xml中生成序列号? (Python 2.7)

时间:2016-05-20 12:49:36

标签: python xml python-2.7 sequence sequences

我有一个生成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 /编码一般都是新手,所以任何帮助都表示赞赏!很高兴在必要时提供额外的信息。

3 个答案:

答案 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()

由于我没有提供完整的脚本,因此对某些人来说没有任何意义,但它可以用于我的目的!谢谢大家的建议