나는 많은 일을 절약하는 동시에 파이썬을 배우려고합니다.xml의 요소 텍스트를 변경하기 위해 사전을 사용하십시오.
이전 장치 ID와 새 장치 ID를 매핑하는 xml 파일과 사전 파일이 있습니다.
트리를 반복하고 사전 키와 일치하는 모든 logical_devid 하위 또는 각 사전 키의 logical_devid를 찾으려고합니다. 두 경우 모두 logical_devid.text를 새로운 값으로 대체하십시오.
XML은
0A40 0127
0A41 0128
0A42 0129
0A43 012A
내가 ElementTree 객체로 XML 파일을로드 한의
<lun>
<pseudo_dev>emcpower146a</pseudo_dev>
<udev>0x12b00000490</udev>
<product_id>symmetrix</product_id>
<frame_id>000192604705</frame_id>
<logical_devid_type>symm_id</logical_devid_type>
<logical_devid>0A43</logical_devid>
</lun>
텍스트 파일을 니펫을 나는 사전에 텍스트 파일을로드했습니다.
import xml.etree.cElementTree as ET
tree = ET.ElementTree(file='emcpower.mappings')
d = {}
with open("translate-table.txt") as f:
for line in f:
(old, new) = line.split()
d[(old)] = new
나는 반복하고 내가 가장 좋은 방법은 사전에 알려진 변경을 반복하는 것입니다 생각 elem.text 를 대체 할 수있는 가장 좋은 방법을 알아 내려고 붙어있어.
# :
for old_devid, new_devid in d.iteritems():
다음은 XML의 일종 여기
거의 내가 원하는 것을 전체 스크립트입니다 new_devid하는 old_devid, 설정 elem.text 일치 자식 logical_devid에 대한 찾을 수 있습니까!/usr/bin/python 부분을
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
#read in emcpower.mappings file as an entire xml tree of elements
tree = ET.ElementTree(file='emcpower.mappings')
# this defines a dictionary with the contents of the translate table which
# is simply the old device ID as key and new device id as value
d = {}
with open("translate-table.txt") as f:
for line in f:
(old, new) = line.split()
d[(old)] = new
for elem in tree.iterfind('lun/logical_devid'):
old_devid = elem.text
new_devid = d.get(old_devid)
try:
new_devid
except NameError:
new_devid = None
else:
if new_devid:
elem.text = new_devid
print "The logical_devid will be changed to", elem.text
tree.write('emcpower.mappings.new',)
감사합니다. – totallyGreg