Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I append a string to a Path in Python?

The following code:

from pathlib import Path
Desktop = Path('Desktop')
SubDeskTop = Desktop + "/subdir"

gets the following error:

    ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call last)
    <ipython-input-4-eb31bbeb869b> in <module>()
             1 from pathlib import Path
             2 Desktop = Path('Desktop')
       ----> 3 SubDeskTop = Desktop+"/subdir"

     TypeError: unsupported operand type(s) for +: 'PosixPath' and 'str'

I'm clearly doing something shady here, but it raises the question: How do I access a subdirectory of a Path object?

like image 1000
Ray Salemi Avatar asked Jan 10 '18 15:01

Ray Salemi


People also ask

What is SYS path append?

The sys. path. append() is a built-in function of the sys module in Python that can be used with path variables to add a specific path for an interpreter to search.

What is OS path join?

os. path. join combines path names into one complete path. This means that you can merge multiple parts of a path into one, instead of hard-coding every path name manually.


2 Answers

  • The correct operator to extend a pathlib object is /
from pathlib import Path

Desktop = Path('Desktop')

# print(Desktop)
WindowsPath('Desktop')

# extend the path to include subdir
SubDeskTop = Desktop / "subdir"

# print(SubDeskTop)
WindowsPath('Desktop/subdir')

# passing an absolute path has different behavior
SubDeskTop = Path('Desktop') / '/subdir'

# print(SubDeskTop)
WindowsPath('/subdir')
  • When several absolute paths are given, the last is taken as an anchor (mimicking os.path.join()’s behavior):
>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')

>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')
  • In a Windows path, changing the local root doesn’t discard the previous drive setting:
>>> PureWindowsPath('c:/Windows', '/Program Files')
PureWindowsPath('c:/Program Files')
  • Refer to the documentation for addition details pertaining to giving an absolute path, such as Path('/subdir').

Resources:

  • pathlib
    • Basic use
  • Python 3's pathlib Module: Taming the File System
like image 110
Ray Salemi Avatar answered Oct 12 '22 19:10

Ray Salemi


What you're looking for is:

from pathlib import Path
Desktop = Path('Desktop')
SubDeskTop = Path.joinpath(Desktop, "subdir")

the joinpath() function will append the second parameter to the first and add the '/' for you.

like image 28
r.ook Avatar answered Oct 12 '22 19:10

r.ook