我正在尝试读取一个目录树,将其写入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's chidren”:
<Project>
<Roman/>
<Cuisine/>
<Essais/>
<Science/>
<r20s/>
<r19s/>
<Amerique/>
<France/>
<Asie/>
<Religion/>
<Politique/>
<maths/>
<physique/>
</Project>
Amerique,法国,Asie应该是美食的子目录。
感谢您的帮助。 让 - 帕特里克
答案 0 :(得分:3)
您需要跟踪父文件夹,并观察您需要添加每个步行目录的位置。
# -*- 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>