Remove Last Path Component In a String

Viewed 85529

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)
4 Answers

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)

Other useful attributes/methods are:

path.name
>> "myFile.txt"
path.stem
>> "myFile"
path.parts
>> ("C:\\", "Users", "myFile.txt")
path.with_suffix(".csv")
>> "myFile.csv"
path.iterdir()
>> #iterates over all files/directories in path location
path.isdir()
>> #tells you if path is file or directory

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