2016-05-15 10 views
0

Ich habe diesen Code geschrieben, um zu überprüfen, ob einige der Dateien in einem bestimmten Verzeichnis weitere Dateien oder Verzeichnisse sind.Überprüfen, ob eine Datei ein Verzeichnis oder eine reguläre Datei in Python ist 2.7.11

Meine Dateistruktur ist wie wie:

C:\Users\Desktop\pythonprograms 
|-temp1 
|-temp2 
|-sample.py 

import os 

filepath = os.getcwd() 
backslash = "\\" 
allfiles = os.listdir(filepath) 

for indexval in range(filelist): 
    print "File ", indexval, allfiles[indexval], type(allfiles[indexval]) 
checkfileisdir = filepath + backslash 
dirsavailable = [checkfileisdir + indexval for indexval in allfiles] 
for checkfile in dirsavailable: 
    print os.path.isdir(checkfileisdir) 

Der obige Code gibt True zurück, für die Verzeichnisse sowie die Dateien.

Der folgende Code löst den Fehler. Ich suche nach Erklärungen statt Code-Schnipsel.

for indexval in range(filelist): 
    print "File ", indexval, allfiles[indexval], type(allfiles[indexval])   
    checkfileisdir = filepath + backslash + allfiles[indexval] 
    print os.path.isdir(checkfileisdir), 

Ich kann nicht erklären warum. Kann mir jemand beim Lernen helfen?

Vielen Dank im Voraus.

+4

Was ist 'filelist' Sie in Ihrem Code iterieren? – Tanu

+1

Wolltest du 'isdir (checkfile)'? Im Augenblick laufen Sie 'isdir (checkfileisdir)' auf der gleichen 'checkfileisdir' Variable immer und immer wieder. – BrenBarn

Antwort

-1

Sie versuchen, falsche Funktion für Ihre Aufgabe zu verwenden.

lesen in documentation

os.listdir

Zurück eine Liste mit den Namen der Einträge im Verzeichnis gegeben durch Pfad enthält. Die Liste ist in willkürlicher Reihenfolge. Es enthält nicht die Sondereinträge '.' und '..', selbst wenn sie im Verzeichnis vorhanden sind.

Einträge im Verzeichnis hier ist jede Art von Eintrag (Datei, Verzeichnis usw.)

Sie benötigen diese Funktion zu nutzen:

os.walk (oben, topdown = True, onerror = Keine, followlinks = False)

Generieren Sie die Dateinamen in einem Verzeichnisbaum, indem Sie den Baum entweder von oben nach unten oder von unten nach oben durchlaufen. Für jedes Verzeichnis in der Baumstruktur, die an der obersten Stelle des Verzeichnisses liegt (einschließlich top selbst), ergibt es ein 3-Tupel (dirpath, dirnames, filenames).

Here ist ein gutes Anwendungsbeispiel

+0

Nicht klar, wie das mit der Frage zusammenhängt. Es ist durchaus sinnvoll, über die von 'listdir' zurückgegebenen Einträge zu iterieren und zu sehen, ob es sich um Dateien oder Verzeichnisse handelt. – BrenBarn

+0

Der Autor hat zumindest Compiler Fehler in seinem Code ** Bereich (Dateiliste) ** - Dateiliste ist oben nicht definiert. Auch hier iterieren alle Einträge, so dass es sehr einfach sein kann, alle Verzeichnisse in einer Liste und alle Dateien in einer anderen zu bekommen –

Verwandte Themen