내 디렉토리 구조는 다음과 같습니다. 다음 test
은 디렉토리 a
및 b
. a
그리고 b
더 하위 디렉토리를 포함하고 a1
, a2
하고 b1
, b2
각각. 또한 a1
이름이 text
.
다음과 같이 ElementTree XML API 를 사용하여이 구조에 대한 xml 파일을 만들었습니다 .
#!/usr/bin/env python3
import xml.etree.ElementTree as ET
test = ET.Element('test')
a = ET.SubElement(test,'a')
a1 = ET.SubElement(a,'a1')
text = ET.SubElement(a1,'text')
a2 = ET.SubElement(a,'a2')
b = ET.SubElement(test,'b')
b1 = ET.SubElement(b,'b1')
b2 = ET.SubElement(b,'b2')
ET.dump(test)
위 프로그램의 출력은 다음과 같습니다.
<test>
<a>
<a1>
<text />
</a1>
<a2 />
</a>
<b>
<b1 />
<b2 />
</b>
</test>
그러나 주어진 디렉토리에 대해 프로그래밍 방식으로 xml을 생성해야합니다. 가능할까요?
이것은 pathlib를 사용하는 재귀 시도입니다 .
from pathlib import Path
import xml.etree.ElementTree as ET
def xml_dir(pth, et_element=None):
if et_element is None:
et_element = ET.Element(pth.name)
else:
et_element = ET.SubElement(et_element, pth.name)
for file in (fle for fle in pth.iterdir() if fle.is_file()):
ET.SubElement(et_element, file.name)
for directory in (fle for fle in pth.iterdir() if fle.is_dir()):
xml_dir(directory, et_element)
return et_element
ret = xml_dir(Path('/home/user/startdir/'))
이것은 ET.Element
처음에 새로운 것을 만들고 ET.SubElement
모든 하위 디렉토리에 s를 첨부 합니다.
추가로 파일과 디렉토리를 정렬 할 수 있습니다.
예쁘게 인쇄 된 xml 출력이 필요한 경우이 들여 쓰기 기능이 필요합니다 ( http://effbot.org/zone/element-lib.htm#prettyprint ).
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
이를 사용하면 요소 트리의 멋진 문자열 표현을 얻을 수 있습니다.
ret = xml_dir(Path('/home/user/startdir/'))
indent(ret)
ET.dump(ret)
또는 문자열을 변수에 저장하려는 경우 :
strg = ET.tostring(ret, method='xml').decode()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다