os.listdir(path) bringt mir None
Huh, das liegt doch an was anderem, was ich mir allerdings nicht erklären kann. Ich will rekursiv durch ein Verzeichnis wandern und dabei eigentlich nur mittels myList.append(myString) einen String (aktuelles Verzeichnis) an eine Liste (Pfad bis zum aktuellen Verzeichnis) anhängen.
Nach dem append() ist meine Liste plötzlich None. Jemand einen Tipp, woran das liegt?
Erzeugt folgende Ausgabe:
Nach dem append() ist meine Liste plötzlich None. Jemand einen Tipp, woran das liegt?
Hier leider nur die Windows-Variante:Achso: Nur falls jetzt jemandem die Idee kommt... Nein, ich möchte nicht die Python-Funktion os.walk() benutzen, weil ich später noch mehr als nur die Verzeichnis- und Dateinamen brauche.
Code: Alles auswählen
import os
class Foo:
def __init__(self):
# list of directories to snapshot
dirlist = ["C:\\test\\"]
# create dirlist (for testing purposes)
if not os.path.exists(dirlist[0]):
os.mkdir(dirlist[0])
file("%s\\file1.txt" % dirlist[0], "w")
file("%s\\file2.txt" % dirlist[0], "w")
file("%s\\file3.txt" % dirlist[0], "w")
os.mkdir("%s\\subdir1" % dirlist[0])
file("%s\\subdir1\\file1.txt" % dirlist[0], "w")
file("%s\\subdir1\\file2.txt" % dirlist[0], "w")
os.mkdir("%s\\subdir2" % dirlist[0])
# walk through dirlist
for dir in dirlist:
# check if path exists
if os.path.exists(dir):
# walk through
self.walk([dir])
# walk through a path recursively
def walk(self, lPath):
print "="*32
print "%s" % lPath
print "="*32
for sDirEntry in os.listdir("\\".join(lPath)):
# if directory: walk recursively
if os.path.isdir(os.path.join("\\".join(lPath),sDirEntry)):
print "%s : %s" % (type(lPath), lPath)
print "%s : %s" % (type(sDirEntry), sDirEntry)
app = lPath.append(sDirEntry)
print "after append() : %s" % app
self.walk(app)
Foo()
Code: Alles auswählen
================================
['C:\\test\\']
================================
<type 'list'> : ['C:\\test\\']
<type 'str'> : subdir1
after append() : None
================================
None
================================
Traceback (most recent call last):
File "test.py", line 39, in ?
Foo()
File "test.py", line 23, in __init__
self.walk([dir])
File "test.py", line 37, in walk
self.walk(app)
File "test.py", line 30, in walk
for sDirEntry in os.listdir("\\".join(lPath)):
TypeError: sequence expected, NoneType found
Zuletzt geändert von droptix am Sonntag 25. Dezember 2005, 11:17, insgesamt 1-mal geändert.
Append gibt immer None zurück.droptix hat geschrieben:Code: Alles auswählen
app = lPath.append(sDirEntry)
Wie ich oben bereits postete:
Erstens macht das auch nix weiter als mit os.listdir() die Verzeichnisse rekursiv zu durchwandern und zweitens ist das Ergebnis von os.walk() für meine Zwecke nicht passend, da ich zusätzlich noch weitere Dateiinformationen wie Dateigröße und Datum benötige.Achso: Nur falls jetzt jemandem die Idee kommt... Nein, ich möchte nicht die Python-Funktion os.walk() benutzen, weil ich später noch mehr als nur die Verzeichnis- und Dateinamen brauche.
Ich möchte einfach eine "bessere" oder andere Struktur haben, als die von os.walk(). Quasi so hier:
Ich kann das einfach auch besser nachvollziehen und später v.a. aber auch anpassen, da meine Rekursiv-Funktion eine eigene ist. Gefällt mir einfach besser. Sicher kann ich die Struktur aus os.walk() auch in meine bevorzugte umwandeln, aber dann kann ich's auch gleich selber erstellen.
Außerdem ignoriert os.walk() ExceptionErrors von os.listdir(), was ich nicht besonders vorteilhaft finde.
Code: Alles auswählen
allDirs = {
'dirs' : {
'C:': {
'dirs': { ... (rekursiv) ... }
'files': [ ... (rekursiv) ... ]
}
},
'files': [
{
'name': "file1.ext",
'size': 12334567,
'md5sum': "wer76824ckwxcqw9xkc4nmqw78yb"
}
]
}
Außerdem ignoriert os.walk() ExceptionErrors von os.listdir(), was ich nicht besonders vorteilhaft finde.
Wenn Du etwas mit den Ausnahmen machen möchtest, dann gibt's bei `os.walk()` einen dritten Parameter (`onerror`) bei dem man eine Funktion angeben kann, die dann mit der entsprechenden Ausnahme aufgerufen wird.