Es gibt allerdings noch einen Fehler. Es werden keine Dateien des ersten Verz. eingelesen Ich weiß allerdings nicht wieso... Kann mir da einer helfen???
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
PathWalk by JensDiemer (www.jensdiemer.de)
Liest das Dateisystem aus und speichert Verz.-/Datei-Namen
Bugs
----
Dateien werden nicht aus dem ersten Verz. ausgelesen.
"""
__version__ = "0.0.1"
__history__ = """
v0.0.1
- erste Version
"""
import os, sys, time
class pathwalk:
"""
Liest das Dateisystem aus und speichert Verz.-/Datei-Namen
"""
def __init__( self, path, saveFiles = True ):
"""
path - Verz. welches inkl. allen Unterverz. ausgelesen werden soll.
saveFiles - legt fest ob Dateien auch ausgelesen werden sollen.
"""
self.saveFiles = saveFiles
self.dirdata = {}
self.dir_id = -1 # ID des Verz.
self.walk( path ) # Verz. Auslesen
def walk( self, path, parent_id = -1, level = 0 ):
"""
Durchwandert rekursiv >path< und speichert Verz.-/Datei-Namen in self.dirdata ab
"""
current_dirname = path.split(os.sep)[-1]
self.dir_id += 1
self.dirdata[self.dir_id] = {
"name" : current_dirname,
"parent_id" : parent_id,
"level" : level
}
if self.saveFiles:
self.dirdata[self.dir_id]["files"] = []
#~ print " "*(level*3), current_dirname
for diritem in self.caseinsensitive_sort( os.listdir( path ) ):
joined_path = os.path.join( path, diritem )
if os.path.isdir( joined_path ):
# Ist ein Verzeichnis -> reingehen
self.walk( joined_path, self.dir_id, level+1 )
if self.saveFiles and os.path.isfile( joined_path ):
# Abspeichern der Dateien
self.dirdata[self.dir_id]["files"].append( diritem )
if self.saveFiles:
# Dateiliste sortieren
#~ print " "*(level*3), self.dirdata[self.dir_id]["files"]
self.dirdata[self.dir_id]["files"] = self.caseinsensitive_sort( self.dirdata[self.dir_id]["files"] )
def caseinsensitive_sort( self, stringList ):
"""
case-insensitive string comparison sort
doesn't do locale-specific compare
though that would be a nice addition
usage: stringList = caseinsensitive_sort(stringList)
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/170242
"""
tupleList = [(x.lower(), x) for x in stringList]
tupleList.sort()
return [x[1] for x in tupleList]
def dumpdata( self ):
"""
Gespeicherte Daten Ausgeben
"""
print "-"*80
# Nur Verzeichnisliste Ausgeben
for dir_id in self.dirdata:
level = self.dirdata[dir_id]["level"]
level = level * 3
print " "*(level-1), dir_id,"-",self.dirdata[dir_id]["name"],self.dirdata[dir_id]
print "-"*80
if not self.saveFiles:
print "(Dateien wurden nicht eingelesen)"
return
# Alle Daten Ausgeben
for dir_id in self.dirdata:
level = self.dirdata[dir_id]["level"]
level = level * 3
print " "*(level-1), dir_id,"-",self.dirdata[dir_id]
spacer = " "*level
for file in self.dirdata[dir_id]["files"]:
print spacer,file
print "-"*80
if __name__ == "__main__":
print "Lese Verzeichnisdaten ein..."
StartTime = time.time()
MyPathWalk = pathwalk( ".." )
EndTime = time.time()
print "Ausführungszeit: %s" % (EndTime - StartTime)
MyPathWalk.dumpdata()