listdir, listpath - Verwirrung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

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) 
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Versuchst du ``os.path.walk``/``os.walk`` nachzuimplementieren oder was willst du mit dem Code bewirken?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

Dank für die Mühen!

os.walk ist nicht vorhanden und ich muss auf anderem Wege alle Dateien und Ordner mit 'Suchstring' auflisten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann sollstst du dein Python aktualisieren. ``os.walk`` gibt es schon seit Python 2.3 was vor über 5 Jahren released wurde.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

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)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Aber ``os.path.walk`` existiert, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

ImportError: No module named walk
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``import os.path``

Und ein Tutorial, bzw. die Dokumentation von ``os.path`` lesen. Da steht drin wie man damit arbeitet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

`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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

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
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

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:

Code: Alles auswählen

case-insensitive
leider finde ich zu walk case-Insensitive, os.walk case-Insensitive, walk kleinbuchstaben usw. nichts brauchbares
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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'])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten