Seite 1 von 1
listdir, listpath - Verwirrung
Verfasst: Sonntag 15. März 2009, 14:29
von shadow07
warum bekomme ich, wenn nur Ordner und keine Dateien mit Suchstring gefunden werden, die Ordner unter Dateiliste ? (wenn Dateien oder Dateien und Ordner gefunden werden dann wird beides in die entsprechenden Listen eingefügt)
Code: Alles auswählen
directories = [startDir]
while len(directories)>0:
directory = directories.pop()
for name in os.listdir(directory):
fullpath = os.path.join(directory,name)
if os.path.isfile(fullpath):
if fullpath.endswith(Endung) is True and fnmatch.fnmatch(os.path.basename(fullpath.lower()),Suchstring) is True:
Dateiliste.append( fullpath )
else:
pass
elif os.path.isdir(fullpath):
if fnmatch.fnmatch((fullpath.lower()),Suchstring):
Ordnerliste.append( fullpath )
directories.append(fullpath)
Verfasst: Sonntag 15. März 2009, 15:09
von Leonidas
Versuchst du ``os.path.walk``/``os.walk`` nachzuimplementieren oder was willst du mit dem Code bewirken?
Verfasst: Sonntag 15. März 2009, 15:11
von shadow07
Dank für die Mühen!
os.walk ist nicht vorhanden und ich muss auf anderem Wege alle Dateien und Ordner mit 'Suchstring' auflisten
Verfasst: Sonntag 15. März 2009, 15:14
von Leonidas
Dann sollstst du dein Python aktualisieren. ``os.walk`` gibt es schon seit Python 2.3 was vor über 5 Jahren released wurde.
Verfasst: Sonntag 15. März 2009, 15:16
von shadow07
ist eine Adaption von Python, auf die ich keinen Einfluss habe. Auch wenn ich es für mich implementieren würde, käme es für andere nicht in Frage.... (muss also anders gehen, geht ja auch - ähm - fast)
Verfasst: Sonntag 15. März 2009, 15:19
von Leonidas
Aber ``os.path.walk`` existiert, oder?
Verfasst: Sonntag 15. März 2009, 15:22
von shadow07
ImportError: No module named walk
Verfasst: Sonntag 15. März 2009, 15:29
von Leonidas
``import os.path``
Und ein Tutorial, bzw. die Dokumentation von ``os.path`` lesen. Da steht drin wie man damit arbeitet.
Verfasst: Sonntag 15. März 2009, 15:29
von Trundle
`os.path.walk()` ist ja auch eine Funktion und kein Modul, selbiges gilt für `os.walk()`. Also musst du das Modul importieren, in dem die Funktion ist, und nicht versuchen, die Funktion als Modul zu importieren.
Verfasst: Sonntag 15. März 2009, 16:31
von shadow07
ok, erstens: mein Fehler, os.walk ist vorhanden, hatte versucht doppelt zu importieren da es ja mit imort os schon da war
zweitens: habe jetzt etliche Seiten zu os.walk aufgerufen (hier und anderswo), mangels jeglicher englisch-Kenntnisse kapier ich das ganze jedoch überhaupt nich -> gibt es irgendwo eine deutsche Erläuterung dazu?
sonstens: ist aber alles keine Erklärung, warum obiger Code nicht das tut, was ich von ihm erwarte, der Logic (also meiner) nach müsste das doch auch funktionieren und dürfte so nicht reagieren
Verfasst: Sonntag 15. März 2009, 17:51
von Leonidas
shadow07 hat geschrieben:zweitens: habe jetzt etliche Seiten zu os.walk aufgerufen (hier und anderswo), mangels jeglicher englisch-Kenntnisse kapier ich das ganze jedoch überhaupt nich -> gibt es irgendwo eine deutsche Erläuterung dazu?
Schau dir doch mal
diesen Post an. Generell findet die Forensuche eine Menge Threads.
shadow07 hat geschrieben:sonstens: ist aber alles keine Erklärung, warum obiger Code nicht das tut, was ich von ihm erwarte, der Logic (also meiner) nach müsste das doch auch funktionieren und dürfte so nicht reagieren
Ja, ich habe aber persönlich keine Lust deinen Code nachzuvollziehen, vor allem bevor man den nicht auf ``os.walk`` portiert - da muss man wenigstens deine Implementation davon nicht auch noch debuggen.
Verfasst: Sonntag 15. März 2009, 18:20
von shadow07
ich hatte ausführlich gesucht und gelesen, nicht nur den genannten, sondern auch das hier:
Code: Alles auswählen
def getHTMLfiles( Path ):
def myfilter( files ):
result=[]
for file in files:
if fnmatch.fnmatch(file.lower(),"*.htm?"):
result.append(file)
return result
FileList={}
for root, dirs, files in os.walk(Path):
FilteredFiles = myfilter( files )
if FilteredFiles != []:
FileList[root] = FilteredFiles
return FileList
das dumme, ich kapiere die Funktion nicht und schreibe deshalb nur Blödsinn im eigenen Code, z.B.:
Code: Alles auswählen
def myfilter( files ):
result=[]
for file in files:
if fnmatch.fnmatch(file.lower(),Suchstring):
result.append(file)
return result
FileList={}
for root, dirs, files in os.walk(startDir):
FilteredFiles = myfilter( files )
if FilteredFiles != []:
FileList[root] = FilteredFiles
return FileList
= SyntaxError: 'return' outside function
ich möcht doch einfach nur Dateien und Ordner in je einer Liste haben, welche den Variablen Endung und Suchstring entsprechen
edit:
folgendes findet zwar zumindest schon Dateien, jedoch nicht case-intensiv wenn im Suchstring die Gross/Kleinschreibung nicht übereinstimmt:
leider finde ich zu walk case-Insensitive, os.walk case-Insensitive, walk kleinbuchstaben usw. nichts brauchbares
Verfasst: Sonntag 15. März 2009, 23:01
von Leonidas
Wie gesagt, du solltest dir das Python-Tutorial ansehen, dann würdest du auch wissen warum ``return`` außerhalb von Funktionen Quatsch ist.
So schwer ist das nämlich wirklich nicht:
Code: Alles auswählen
import os, os.path, fnmatch
def matchedfiles(top, exts):
hits = list()
for dirpath, dirnames, filenames in os.walk(top):
for filename in filenames:
if any(fnmatch.fnmatch(filename.lower(), ext) for ext in exts):
hits.append(os.path.join(dirpath, filename))
return hits
print matchedfiles('.', ['*.htm?', '*.mp4'])