How do I append a string to a Path in Python?
Question:
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?
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:
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.
BEWARE SubDeskTop = Path.joinpath(Desktop, "/subdir")
won’t work. The slash before subdir ruins it. (From Patrik in the comments).
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?
- 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:
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.
BEWARE SubDeskTop = Path.joinpath(Desktop, "/subdir")
won’t work. The slash before subdir ruins it. (From Patrik in the comments).