@@ -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 resource in os .scandir (location ):
337+ loc = os .path .join (location , resource .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 resource . 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 resource .is_dir (follow_symlinks = follow_symlinks ):
352+ dirs .append (resource . name )
353+ elif resource .is_file (follow_symlinks = follow_symlinks ):
354+ files .append (resource . name )
358355 yield location , dirs , files
359356
360357 for dr in dirs :
@@ -403,7 +400,7 @@ def copytree(src, dst):
403400 if not filetype .is_readable (src ):
404401 chmod (src , R , recurse = False )
405402
406- names = os .listdir (src )
403+ names = [ resource . name for resource in os .scandir (src )]
407404
408405 if not os .path .exists (dst ):
409406 os .makedirs (dst )
@@ -544,7 +541,7 @@ def _rm_handler(function, path, excinfo): # NOQA
544541 """
545542 if TRACE :
546543 logger_debug ("_rm_handler:" , "path:" , path , "excinfo:" , excinfo )
547- if function in (os .rmdir , os .listdir ):
544+ if function in (os .rmdir , os .listdir , os . scandir ):
548545 try :
549546 chmod (path , RW , recurse = True )
550547 shutil .rmtree (path , True )
0 commit comments