2013-07-11 2 views
0

디지털 시네마 패키지에서 몇 가지 오류 검사를 수행하는 대형 프로그램의 일부로 다음 코드를 사용하고 있으며 해당 프로그램의 엉덩이를 나열하는 XML 파일의 유효성을 검사하려고 시도합니다. DCP. 어쨌든, 이것은 아직 초기 단계에 머무르고 있으며, 그 결과로 더 많은 파이썬을 배우기를 희망합니다.출력을 목록 또는 사전에 저장합니다.

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) 

출력을 저장할 때 각 줄이 예상대로 표시되지 않는 목록입니다. urn 빼기 : 나는 각 줄을 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 
+0

"예상대로 형식을 지정하지 않습니다"? 그러면 형식이 어떻게 지정됩니까? – kindall

+0

KeyId에 대한 모든 일치 또는 key_search_words에있는 다른 값을 반복하고 각 일치 항목을 목록에 저장하는 방법은 무엇입니까? 모든 경기가 목록의 다른 요소를 채우고 싶습니다. 목록을 채우기 위해 표시 할 때 전체 줄을 가져 왔습니다. – inbinder

답변

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',...]} 
+0

내가 한 번 기회를 줘 보자. 객체를 인스턴스화 할 때 어떻게 보이는지 자세히 설명해 주시겠습니까? 내 검색어가 좀 더 광범위하다면 어떨까요? – inbinder

+0

인스턴스를 제외하고는 아무 것도 일어나지 않을 것이라고 생각합니다. 인스턴스는'res' 속성을 갖습니다. @ user1124541 – zhangyangyu

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 "와 그 숫자들의리스트를 값으로 사용합니다.

관련 문제