0

我将以下代码用作大型程序的一部分,该程序对数字电影包进行一些错误检查,并尝试检查列出 DCP 上驴的 XML 文件的有效性。无论如何,这一切都还处于起步阶段,我希望因此能学到更多的 Python。

import xml.etree.ElementTree as etree
import sys

class Parser(object):
    def __init__(self, file_name):
        self.file_name = file_name

    def display(self, rename_this_list):
        tree = etree.parse(self.file_name)
        for node in tree.getiterator():
            for element in rename_this_list:
                if element in node.tag:
                    uuid=(node.text)
                    #uuid = [s.strip('urn:') for s in uuid]
                    print(uuid)

fname = sys.argv[1]
key_search_words = ['KeyId']
instance = Parser(fname)
instance.display(key_search_words)

当我尝试存储输出以使每一行都是一个列表时,它不会像我期望的那样格式化。减去瓮:我想用 uuid: 和以下信息存储每一行​​作为列表的元素。

urn:uuid:9851b0f6-4790-0d4c-a69d-ea8abdedd03d
urn:uuid:8317e8f3-1597-494d-9ed8-08a751ff8615
urn:uuid:5d9b228d-7120-344c-aefc-840cdd32bbfc
urn:uuid:1e32ccb2-ab0b-9d43-b879-1c12840c178b
urn:uuid:44d04416-676a-2e4f-8995-165de8cab78d
urn:uuid:906da0c1-b0cb-4541-b8a9-86476583cdc4
urn:uuid:0fe2d73a-ebe3-9844-b3de-4517c63c4b90
urn:uuid:862fa79a-18c7-9245-a172-486541bef0c0
urn:uuid:aa2f1a88-7a55-894d-bc19-42afca589766
urn:uuid:59d6eeff-cd56-6245-9f13-951554466626
urn:uuid:14a13b1a-76ba-764c-97d0-9900f58af53e
urn:uuid:ccdbe0ae-1c3f-224c-b450-947f43bbd640
urn:uuid:dcd37f10-b042-8e44-bef0-89bda2174842
urn:uuid:9dd7103e-7e5a-a840-a15f-f7d7fe699203
4

2 回答 2

1

如果你需要一个列表,那么你可以试试这个。

    def display(self, rename_this_list):
        listOfNodes = []
        tree = etree.parse(self.file_name)
        for node in tree.getiterator():
            for element in rename_this_list:
                if element in node.tag:
                   # append text of element to the list 
                   # without first four characters which are "urn:"
                   listOfNodes.append(node.text[4:])
        print str(listOfNodes)
        return listOfNodes

请记住,字典的键必须是唯一的,在字典中你不能有两个带有键“uuid”的项目,如果你想要一本字典,那么你只能有一个带有一个键“uuid”的字典和一个列表这些数字作为值。

于 2013-07-11T14:12:23.863 回答
0
import collections
class Parser(object):
    def __init__(self, file_name):
        self.file_name = file_name, self.res = collections.defaultdict(list)

    def display(self, rename_this_list):
        tree = etree.parse(self.file_name)
        for node in tree.getiterator():
            for element in rename_this_list:
                if element in node.tag:
                    uuid = node.text
                    key, value = uuid[4:].split(':')
                    self.res[key].append(value)

这能满足你的需要吗?我不知道您的数据的详细信息,所以如果有任何问题,请告诉。我认为结果应该是这样的:

{'uuid':['9851b0f6-4790-0d4c-a69d-ea8abdedd03d','ccdbe0ae-1c3f-224c-b450-947f43bbd640',...]}
于 2013-07-11T14:03:08.633 回答