Zajmuję się wyszukiwaniem plików w Pythonie na dużym dysku twardym. Patrzyłem na os.walk i glob. Zwykle używam os.walk, ponieważ uważam, że jest dużo bardziej schludny i wydaje się szybszy (dla zwykłych katalogów rozmiarów).Szybciej do os.walk lub glob?
Czy ktoś ma z nimi doświadczenie i może powiedzieć, który jest bardziej wydajny? Jak już mówiłem, glob wydaje się wolniejszy, ale możesz używać symboli wieloznacznych itp., Podobnie jak w przypadku spaceru, musisz filtrować wyniki. Oto przykład sprawdzania zrzutów rdzenia.
core = re.compile(r"core\.\d*")
for root, dirs, files in os.walk("/path/to/dir/")
for file in files:
if core.search(file):
path = os.path.join(root,file)
print "Deleting: " + path
os.remove(path)
Albo
for file in iglob("/path/to/dir/core.*")
print "Deleting: " + file
os.remove(file)
Brzmi jak przedwczesny optymalizacji dla mnie. Zerknąłem na źródło (http://hg.python.org/cpython/file/d01208ba482f/Lib/glob.py i http://hg.python.org/cpython/file/d01208ba482f/Lib/os.py) i zobacz, że obie funkcje polegają na 'os.listdir' i' os.isdir', więc moje jelito mówi mi, że nie zdobędziesz wiele takich czy innych rzeczy. (Jednakże, jak wskazano w dwóch z poniższych odpowiedzi, 'os.walk' recurses nad podkatalogami i' glob.iglob' nie ma, więc nie ma sensu porównywać). Jeśli masz problem z wydajnością, zrób profil dla kilku podejść. W przeciwnym razie po prostu napisz wyraźny kod. –