<p>+1</p>
<div class="gmail_quote">On May 2, 2013 11:13 AM, "MRAB" <<a href="mailto:python@mrabarnett.plus.com">python@mrabarnett.plus.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 02/05/2013 17:49, Pieter Nagel wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I propose adding methods like isfile(), isdir(), islink(), isfifo() and<br>
so on - basically everything that would currently be done via code like<br>
"stat.S_ISREG(s.st_mode)".<br>
<br>
Please indicate support or not, so I can know whether to draft a PEP and<br>
work on implementation.<br>
<br>
My motivation is twofold:<br>
<br>
Firstly, it would make code that needs to interpret stat() results using<br>
the existing S_ISREG etc. methods in the stat module look cleaner, more<br>
Pythonic, and less like C code manipulating bitmasks.<br>
<br>
Secondly, in a recent discussion on python-dev [1] the issue was raised<br>
that the stat() call can perform badly under certain situations, and<br>
that some form of caching of the result of stat() calls is therefore<br>
desirable.<br>
<br>
This proposal makes it easier to do one form of caching stat() results:<br>
the kind where the result is manually cached by storing it in some<br>
variable.<br>
<br>
Think of code such as:<br>
<br>
   if os.path.isfile(f) or os.path.isdir(f):<br>
     # do something<br>
<br>
This will indirectly cause two calls to stat().<br>
<br>
Currently, if you want to manually cache that stat call, you'll need to<br>
write:<br>
<br>
   s = os.stat(f)<br>
   if stat.S_ISREG(s.st_mode) or stat.S_ISDIR(s.st_mode):<br>
     # do something<br>
<br>
This not only looks more convoluted and requires an extra import of<br>
stat, but it also looks wildly different from the previous code even<br>
though it basically has the same semantics.<br>
<br>
Under my proposal, this could become:<br>
<br>
   s = os.stat(f)<br>
   if s.isfile() or s.isdir():<br>
     # do something<br>
<br>
This proposal is independent of the current PEP 428 Path object<br>
proposal. However, if accepted, users of PEP 428 Path objects will also<br>
benefit, since those can also return results of stat() calls.<br>
<br>
<br>
</blockquote>
+1<br>
<br>
It also means not having to import the stat module to get the<br>
strangely-named (to me) constants (why the "S_" prefix? Yes, I do know<br>
why, BTW. :-)).<br>
<br>
______________________________<u></u>_________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-ideas" target="_blank">http://mail.python.org/<u></u>mailman/listinfo/python-ideas</a><br>
</blockquote></div>