Remove Last Path Component In a String
PythonStringPython Problem Overview
I have a path:
myPath = "C:\Users\myFile.txt"
I would like to remove the end path so that the string only contains:
"C:\Users"
So far I am using split, but it just gives me a list, and im stuck at this point.
myPath = myPath.split(os.sep)
Python Solutions
Solution 1 - Python
You should not manipulate paths directly, there is os.path module for that.
>>> import os.path
>>> print os.path.dirname("C:\Users\myFile.txt")
C:\Users
>>> print os.path.dirname(os.path.dirname("C:\Users\myFile.txt"))
C:\
Like this.
Solution 2 - Python
You can also use os.path.split
, like this
>>> import os
>>> os.path.split('product/bin/client')
('product/bin', 'client')
It splits the path into two parts and returns them in a tuple. You can assign the values in variables and then use them, like this
>>> head, tail = os.path.split('product/bin/client')
>>> head
'product/bin'
>>> tail
'client'
Solution 3 - Python
The current way to do this (Python > 3.4) is to use the standard library's pathlib
module.
>>> import pathlib
>>> path = pathlib.Path(r"C:\Users\myFile.txt")
>>> path.parent
WindowsPath('C:/Users') #if using a Windows OS
>>> print(path.parent)
C:\Users
This has the additional benefit of being cross platform as pathlib
will make a path object suited for the current operating system (I am using Windows 10)
Solution 4 - Python
While it is true that you should not maybe manipulate paths directly, and should use os.path module, sometimes, you may have your path as a string (for example, if your path was inside a text document, xml, etc.).
In such a situation, it might be safe and maybe even convenient to use string operations (as I found in my use case).
An example (assuming you have read your path from a text file, xml, etc. to a variable called path):
directory = "/".join(list(path.split('/')[0:-1]))
The path is split with " / " as a seperator, sliced to remove the last item in the list, in OPs case "myFile.txt", and joined back with " / " as a seperator.
This will give the path with the file name removed.
OP had the path
myPath = "C:\Users\myFile.txt"
He will have
"C:\Users"