Is there a Pathlib alternate for os.path.join?

26,371

Solution 1

You can use something like this:

(Path(__file__).parent).joinpath('.env')

Documentation:

pathlib.Path.joinpath

Solution 2

Yes there is:

env_path = Path(__file__).parent / ".env"

/ is all you need. This will work in different OSs

Solution 3

Is the following definition of filepath closer in spirit to os.path.join?

import pathlib
main_dir = 'my_main_dir'
sub_dir = 'sub_dir'
fname = 'filename.tsv'
filepath = pathlib.PurePath(main_dir, sub_dir, fname)

Solution 4

You can simply join Path objects and strings:

    import pathlib
    script_parent_path = pathlib.Path(__file__).parent
    my_dir = ".env"
    my_new_path = pathlib.Path(script_parent_path, my_dir)
    print(my_new_path)

That's because:

Pathlib's constructors accept pathsegments. Each element of pathsegments can be either a string representing a path segment, an object implementing the os.PathLike interface which returns a string, or another path object - https://docs.python.org/3/library/pathlib.html#pathlib.PurePath

Share:
26,371
reinhardt
Author by

reinhardt

Updated on July 05, 2022

Comments

  • reinhardt
    reinhardt almost 2 years

    I am currently accessing the parent directory of my file using Pathlib as follows:

    Path(__file__).parent
    

    When I print it, and this gives me the following output:

    print('Parent: ', Path(__file__).parent)
    #output
    /home/user/EC/main-folder
    

    The main-folder has a .env file which I want to access and for that I want to join the parent path with the .env. Right now, I did:

    dotenv_path = os.path.join(Path(__file__).parent, ".env")
    

    which works. But I would like to know, if there is a Pathlib alternate to os.path.join()? Something like:

    dotenv_path = pathlib_alternate_for_join(Path(__file__).parent, ".env")
    
  • Quetzalcoatl
    Quetzalcoatl about 3 years
    I realize my suggestion may not directly address the context of the original question, but searching for "pathlib os.path.join alternative" returns this page as a top result :-)
  • Learner
    Learner over 2 years
    Does it support Path(__file__).parent / "../env"
  • quest
    quest over 2 years
    You can always do, Path(file).parent.parent / "env"
  • Javier TG
    Javier TG about 2 years
    Or Path(__file__).parents[1] / "env"
  • Quinten Cabo
    Quinten Cabo almost 2 years
    Although I think it is better to spread this out more this is art