Remove Last Path Component In a String

PythonString

Python 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"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBrock WoolfView Question on Stackoverflow
Solution 1 - PythonDaniel KluevView Answer on Stackoverflow
Solution 2 - PythonthefourtheyeView Answer on Stackoverflow
Solution 3 - PythonjohnDangerView Answer on Stackoverflow
Solution 4 - Pythonpraveen nellihelaView Answer on Stackoverflow