Skip to content

Commit a6c4f96

Browse files
committed
migrate os.listdir() to os.scandir() to increase performance
As recommended in https://peps.python.org/pep-0471/ Signed-off-by: Miroslav Suchý <msuchy@redhat.com>
1 parent 395b971 commit a6c4f96

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

src/commoncode/fileutils.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,6 @@ def walk(location, ignored=None, follow_symlinks=False):
321321
If `follow_symlinks` is True, then symlinks will not be ignored and be
322322
collected like regular files and directories
323323
"""
324-
# TODO: consider using the new "scandir" module for some speed-up.
325-
326324
is_ignored = ignored(location) if ignored else False
327325
if is_ignored:
328326
if TRACE:
@@ -335,13 +333,12 @@ def walk(location, ignored=None, follow_symlinks=False):
335333
elif filetype.is_dir(location, follow_symlinks=follow_symlinks):
336334
dirs = []
337335
files = []
338-
# TODO: consider using scandir
339-
for name in os.listdir(location):
340-
loc = os.path.join(location, name)
336+
for entry in os.scandir(location):
337+
loc = os.path.join(location, entry.name)
341338
if filetype.is_special(loc) or (ignored and ignored(loc)):
342339
if (
343340
follow_symlinks
344-
and filetype.is_link(loc)
341+
and entry.is_symlink()
345342
and not filetype.is_broken_link(location)
346343
):
347344
pass
@@ -351,10 +348,10 @@ def walk(location, ignored=None, follow_symlinks=False):
351348
logger_debug("walk: ignored:", loc, ign)
352349
continue
353350
# special files and symlinks are always ignored
354-
if filetype.is_dir(loc, follow_symlinks=follow_symlinks):
355-
dirs.append(name)
356-
elif filetype.is_file(loc, follow_symlinks=follow_symlinks):
357-
files.append(name)
351+
if entry.is_dir(follow_symlinks=follow_symlinks):
352+
dirs.append(entry.name)
353+
elif entry.is_file(follow_symlinks=follow_symlinks):
354+
files.append(entry.name)
358355
yield location, dirs, files
359356

360357
for dr in dirs:

0 commit comments

Comments
 (0)