[Python-Dev] cpython (3.2): Fix #11583. Changed os.path.isdir to use GetFileAttributes instead of os.stat.
Georg Brandl
g.brandl at gmx.net
Thu Jun 9 08:16:05 CEST 2011
On 06/09/11 02:00, brian.curtin wrote:
> http://hg.python.org/cpython/rev/88e318166eaf
> changeset: 70713:88e318166eaf
> branch: 3.2
> parent: 70700:0aa3064d1cef
> user: Brian Curtin <brian at python.org>
> date: Wed Jun 08 18:17:18 2011 -0500
> summary:
> Fix #11583. Changed os.path.isdir to use GetFileAttributes instead of os.stat.
>
> By changing to the Windows GetFileAttributes API in nt._isdir we can figure
> out if the path is a directory without opening the file via os.stat. This has
> the minor benefit of speeding up os.path.isdir by at least 2x for regular
> files and 10-15x improvements were seen on symbolic links (which opened the
> file multiple times during os.stat). Since os.path.isdir is used in
> several places on interpreter startup, we get a minor speedup in startup time.
>
> files:
> Lib/ntpath.py | 13 ++++++++++
> Misc/NEWS | 3 ++
> Modules/posixmodule.c | 37 +++++++++++++++++++++++++++++++
> 3 files changed, 53 insertions(+), 0 deletions(-)
>
>
> diff --git a/Lib/ntpath.py b/Lib/ntpath.py
> --- a/Lib/ntpath.py
> +++ b/Lib/ntpath.py
> @@ -672,3 +672,16 @@
> def sameopenfile(f1, f2):
> """Test whether two file objects reference the same file"""
> return _getfileinformation(f1) == _getfileinformation(f2)
> +
> +
> +try:
> + # The genericpath.isdir implementation uses os.stat and checks the mode
> + # attribute to tell whether or not the path is a directory.
> + # This is overkill on Windows - just pass the path to GetFileAttributes
> + # and check the attribute from there.
> + from nt import _isdir
> +except ImportError:
> + from genericpath import isdir as _isdir
> +
> +def isdir(path):
> + return _isdir(path)
Not that it matters, but ISTM that this would be faster as
try:
from nt import _isdir as isdir
except ImportError:
pass
Georg
More information about the Python-Dev
mailing list