os.walk() python: xml-Darstellung einer Verzeichnisstruktur, Rekursion
So, ich bin versucht, os.walk() zum generieren einer XML-Darstellung einer Verzeichnisstruktur. Ich scheine immer eine Tonne von Duplikaten. Es richtig stellen Verzeichnisse innerhalb jedes anderen und Dateien am richtigen Platz für den ersten Teil der xml-Datei, aber nachdem Sie es tut richtig geht es dann weiter durchqueren falsch. Ich bin nicht ganz sicher, warum....
Hier ist mein code:
def dirToXML(self,directory):
curdir = os.getcwd()
os.chdir(directory)
xmlOutput=""
tree = os.walk(directory)
for root, dirs, files in tree:
pathName = string.split(directory, os.sep)
xmlOutput+="<dir><name><![CDATA["+pathName.pop()+"]]></name>"
if len(files)>0:
xmlOutput+=self.fileToXML(files)
for subdir in dirs:
xmlOutput+=self.dirToXML(os.path.join(root,subdir))
xmlOutput+="</dir>"
os.chdir(curdir)
return xmlOutput
Den fileToXML, einfach analysiert aus der Liste, so dass keine Notwendigkeit zu befürchten, dass.
Die Directory-Struktur ist einfach:
images/
images/testing.xml
images/structure.xml
images/Hellos
images/Goodbyes
images/Goodbyes/foo
images/Goodbyes/bar
images/Goodbyes/square
und die resultierende xml-Datei wurde:
<structure>
<dir>
<name>images</name>
<files>
<file>
<name>structure.xml</name>
</file>
<file>
<name>testing.xml</name>
</file>
</files>
<dir>
<name>Hellos</name>
</dir>
<dir>
<name>Goodbyes</name>
<dir>
<name>foo</name>
</dir>
<dir>
<name>bar</name>
</dir>
<dir>
<name>square</name>
</dir>
</dir>
<dir>
<name>foo</name>
</dir>
<dir>
<name>bar</name>
</dir>
<dir>
<name>square</name>
</dir>
</dir>
<dir>
<name>Hellos</name>
</dir>
<dir>
<name>Goodbyes</name>
<dir>
<name>foo</name>
</dir>
<dir>
<name>bar</name>
</dir>
<dir>
<name>square</name>
</dir>
</dir>
<dir>
<name>foo</name>
</dir>
<dir>
<name>bar</name>
</dir>
<dir>
<name>square</name>
</dir>
</structure>
Jede Hilfe wäre sehr geschätzt werden!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, gegen die Verwendung von
os.walk()
, da haben Sie so viel zu tun zu massage seinen Ausgang. Stattdessen nutzen Sie einfach eine rekursive Funktion, die verwendetos.listdir()
,os.path.join()
,os.path.isdir()
usw.Persönlich, ich würde empfehlen, eine sehr viel weniger ausführlich, XML-schema, putting Namen, Attribute und loszuwerden, die
<files>
Gruppe:Dieser liefert eine Ausgabe wie:
etc.
Wenn
os.walk()
mehr gearbeitet wieexpat
's Rückrufe, Sie würden eine einfachere Zeit davon.Entfernen Sie die beiden Zeilen:
sind Sie recursing in die Unterverzeichnisse; aber das ist redundant, weil os.walk bezieht sich.
War ich versucht, os.entfernt, aber ich sah, dass es nicht funktioniert mit der rekursiven Struktur, die ich wollte zu schaffen, in xml. Ich veränderte meinen code wie folgt, und Sie produzieren das Ergebnis brauche ich: