As far as I know, the os.path version does a string conversion to the
platform-preferred way of specifying paths. So e.g. on Windows it replaces
"/" with "\".

This is intended for compatibility with very Windows-focused apps that
(deliberately?) don't understand "/". However, for the system-level
application of loading files, "/" is a de-facto standard that all systems
recognize.

The upshot is that either one will work. I personally use "/" because "\"
was just not a good idea, and Windows ought to give up already--but it
would be slightly more correct semantically to use the os.path conversion.

Regarding the extra dependency, os is built into every distro, so I
wouldn't worry about it.

On Nov 25, 2017 12:01, "Irv Kalb" <i...@furrypants.com> wrote:

> Here's my second question about pygame.image.load.  Actually it's a
> question about specifying paths in pygame.
>
> In my classes, I talk about the concept of a path for loading images,
> sounds, etc.  I suggest that students create an "images" folder and if
> needed, a "sounds" folder in their project folder.   I explain the
> difference between absolute and relative paths, and I point out the reasons
> why relative paths are generally easier to use for loading such assets.
>
> I then explain that with this type of structure, that building a path to
> each asset is a matter of specifying the folder name (and optional
> subfolder name, etc.) and the file name.  I talk about how the different
> operating systems use different characters as the folder separator
> character.  But then I point out how Python solves this issue by allowing
> programmers to use the "/" character as the folder separator character -
> and how Python maps that character into the appropriate character for the
> operating system on which the program is running.  I give an example that I
> create my demo programs on a Mac, then bring them into class and run them
> on a Windows machine.  As long as I create paths like:
>
> ball = pygame.image.load('images/ball.png')
>
> This line will work on Macs and Windows (and I assume on Linux/Unix too).
>
> However, when I look at the documentation for pygame.image.load as an
> example, the documentation says:
>
>
> You should use os.path.join() for compatibility.
>
> eg. asurf = pygame.image.load(os.path.join('data', 'bla.png'))
>
>
>
> My question is: Is there any reason to do it this way?  This requires
> bringing an additional package (the os package), an extra call (to
> os.path.join), and it would require much more of an explanation of what
> os.path.join does.
>
> I have also seen many other books/articles/other people's code where they
> do the same thing by building an absolute path on-the-fly.  This all seems
> like a great deal of overkill.
>
> Any reason NOT to use:
>
> ball = pygame.image.load('images/ball.png')
>
> Irv
>
>
>
>
>

Reply via email to