gpt4 book ai didi

python - 使用 python lxml 在 xml 文件中编写目录树

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:37 24 4
gpt4 key购买 nike

我正在尝试读取目录树以将其写入 xml 文件,但不太成功:

    # -*- coding: utf-8 -*-
"""
Created on Tue Jan 31 13:30:22 2012

@author: Jean-Patrick Pommier
"""
import lxml.etree as et
import os
''''
Lire l'arboresence d'un répertoire projet
P
/ | \
A B C
/ |\ |\ |\
a b ca b c e
Stocker dans un fichier xml
<P>
<A>
<a>
<b>
<c>
</A>
<B>
<a>
<b>
</B>
<C>
<c>
<e>
</C>
</P>
'''
def makeNodes(parentxml,leveldirlist):
#print 'parent',parentxml
print 'chidren',leveldirlist
for d in leveldirlist:
child=et.Element(d)
parentxml.append(child)

if __name__ == '__main__':
topdir='/home/claire/Applications/ProjetPython/testxml/biblio'
projetxml=et.Element('Project')#racine
parent=projetxml

for roots, dirs, files in os.walk(topdir):
print roots#, '*',dirs, '*',files,'\n'
makeNodes(parent,dirs)

print(et.tostring(projetxml,pretty_print=True))

所有的子目录都成为“root 的子目录”:

<Project>
<Roman/>
<Cuisine/>
<Essais/>
<Science/>
<r20s/>
<r19s/>
<Amerique/>
<France/>
<Asie/>
<Religion/>
<Politique/>
<maths/>
<physique/>
</Project>

Amerique、France、Asie 应该是 cuisine 的子目录。

感谢您的帮助。让-帕特里克

最佳答案

您需要跟踪父文件夹,并观察需要添加每个遍历目录的位置。

# -*- coding: utf-8 -*-
import lxml.etree as et
import os
def makeNodes(current, parents, leveldirlist):
new = {}
for d in leveldirlist:
child=et.Element(d)
new[os.path.join(current, d)] = child
parents[current].append(child)
return new

if __name__ == '__main__':
topdir='t1'
projectxml=et.Element('Project')

parents = {topdir: projectxml}
for current, dirs, files in os.walk(topdir):
parents.update(makeNodes(current, parents, dirs))

print(et.tostring(projectxml,pretty_print=True))

这产生了:

<Project>
<t2>
<t6/>
</t2>
<t3>
<t5/>
<t4>
<t7/>
</t4>
</t3>
</Project>

关于python - 使用 python lxml 在 xml 文件中编写目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com