[Python-ideas] Making Path() a built in.

Steven D'Aprano steve at pearwood.info
Tue Jun 5 19:42:27 EDT 2018

On Tue, Jun 05, 2018 at 03:30:35PM +0200, Michel Desmoulin wrote:

> There are very few programs that never use any path operation.

On the contrary, there are many programs than never use any path 
operations. I have many programs which take input and provide output and 
no files are involved at all.

Of course path manipulation is common. But hyperbola about how common it 
is does not help your case.

> Opening a file is such a common one we have a built-in for it with
> open(), but you usually need to do some manipulation to get the file
> path in the first place.
> We have __file__, but the most common usage is to get the parent dir,
> with os or pathlib.

Parent directory of what?

Are you talking about the parent directory of the script? I almost never 
care about the script directory.

I sometimes care about file names passed in by the user, and maybe ten 
percent of the time I care about the parent directory of those file 
names. I sometimes care about the current working directory.

But I can't think of the last time I've cared about __file__. In my 
experience, that's an uncommon need.

You keep making absolute claims about what is "most common". What is 
your evidence for these absolute claims? Have you done a survey of all 
the Python software in existence? Or do what you mean is that this is 
*your* most common usage?

Because it isn't *my* most common usage.

> So much that pathlib.Path is one of the things I always put in a
> PYTHONSTARTUP since you need it so often.

Please don't speak for me. I don't need it at all, and even if I did, 
putting it in *your* startup file doesn't help me.

> I think Path fits the bill for being a built-in, I feel it's used more
> often than any/all or zip, and maybe enumerate.

This is a quick and dirty survey of my code:

[steve at ando python]$ grep Path *.py */*.py */*/*.py | wc -l
[steve at ando python]$ grep "enumerate(" *.py */*.py */*/*.py | wc -l
[steve at ando python]$ grep "zip(" *.py */*.py */*/*.py | wc -l
[steve at ando python]$ grep "any(" *.py */*.py */*/*.py | wc -l
[steve at ando python]$ grep "all(" *.py */*.py */*/*.py | wc -l

So I would say that Path is used about 25 times less often than zip, and 
I wouldn't consider zip to be an essential builtin. I use math.sqrt 
about 15 times more often than Path.

> Besides, it would help to make people use it, as I regularly meet dev
> that keep import os.path because of habits, tutorials, books, docs, etc.

Why do you want to *make* people use it? Why shouldn't people use 
os.path if it meets their needs?


More information about the Python-ideas mailing list