2013-08-22 4 views
1

다음 코드를 사용하면 예상되는 결과를 얻을 수 있습니다. 파이썬 : for 루프 용 compact/one 라이너

#!/bin/env python 
import xml.etree.ElementTree as e 
tree = e.parse("Document.XML") 
root = tree.getroot() 
vals=[] 

코드의 다음 부분은 한 줄 또는 컴팩트를 할 수 있습니까?

for ch in root.findall('arch'): 
    for gc in ch.findall('pro'): 
     vals.append(gc.get('label')) 

내가 가진 libxml2를 버전 xpath을 지원하지 않습니다,이 옵션을 제안하지 마십시오. XML 파일은 다음과 같습니다

<projects> 
    <arch name="arch1"> 
    <pro label="A1" type="B1" state="C1"/> 
    .... 
    </arch> 
    .... 
</projects> 
+11

네, 할 수는 있지만 반대하는 것이 좋습니다. 이 코드는 읽을 수 없습니다. –

답변

6

물론, 두 개의 루프와 지능형리스트를 사용

vals = [gc.get('label') for ch in root.findall('arch') for gc in ch.findall('pro')] 
+0

물론, 명시 적 외부 루프를 사용하여 중간에 갈 수도 있지만 내부 루프는 ch.findall ('pro()의 gs.get ('label ')에 대한 간단한 이해'vals.append '))'. 세 가지 유형을 모두 입력하고 어느 것이 가장 읽을 수 있는지 (그리고 동료 인 경우 동료/동료 기여자/등)를 볼 가치가 있습니다. – abarnert

+0

@abarnert :'vals.extend()'를 의미합니까? –

+0

그래, 확실히. 그것을 잡아 주셔서 감사합니다. – abarnert

1

xmltodict를 사용하여 당신은 할 아마 수

data = xmltodict.parse("Document.XML") 
val = data['arch']['pro']['@label'] 

당신은거야 같은 내 의사 코드로 복수 val에 대한 목록 이해력을 추가해야하지만, 위의 내용은 기본 사용법을 설명해야합니다 (그리고 git 페이지 참조). Bruno Rocha은 최근 xmltodict에 관한 블로그입니다.

+0

어떻게'xmltodict' 모듈을 얻을 수 있습니까? 이것은 pyton 2.x에서 사용할 수 있습니까? – iamauser

+0

'pip install xmltodict' –