How to get file name from a path in Python?

In this Python tutorial, we will discuss, different ways to get file name from a path in Python. Not only this, I will also show you how to get the file extension from the file name in Python. Finally, we will discuss, how to get the file name without extension in Python.

How to get the file name from Path in Python

Here we will see at least 3 different ways to get the file name from path in Python.

Let’s consider an example file path: /home/user/documents/sample.txt. Here, sample.txt is the file name that we are interested in extracting. Below, we will explore different methods to achieve this.

Method 1: Using os.path.basename()

The os module in Python provides a plethora of functions to interact with the operating system. The os.path.basename() function can be used to extract the filename from a path.

import os

file_path = "/home/user/documents/sample.txt"
file_name = os.path.basename(file_path)

print(file_name)  # Output: sample.txt

Here, the os.path.basename() function takes the file path as an argument and returns the base name, i.e., the file name. Check the screenshot below for the output:

python file name

Method 2: Using pathlib.Path()

pathlib is a module in Python 3, which is object-oriented and a more modern approach to handling filesystem paths. It’s recommended to use pathlib over os.path for improved readability and simplicity.

from pathlib import Path

file_path = Path("/home/user/documents/sample.txt")
file_name = file_path.name

print(file_name)  # Output: sample.txt

In this example, we create a Path object with the file path as an argument and then use the name attribute to obtain the file name.

Check the screenshot below for the output:

get filename python
get filename python

Method 3: Using string splitting

This method is less reliable and not recommended for use in production code, but for the sake of completeness, we can also split the string to extract the filename.

file_path = "/home/user/documents/sample.txt"
file_name = file_path.split('/')[-1]

print(file_name)  # Output: sample.txt

Here, we split the file path string by the delimiter / and select the last element in the resulting list. This method is not recommended because it relies on a fixed delimiter and can cause issues with different operating systems.

Handling Edge Cases

The methods above work well for standard file paths, but what if the file path ends with a directory separator (/ or \ depending on the OS)? In such cases, the first two methods are robust enough to handle them, but the string splitting method will fail.

Let’s demonstrate this with an example:

import os
from pathlib import Path

file_path = "/home/user/documents/directory/"

# Using os.path.basename()
file_name_os = os.path.basename(file_path.rstrip(os.path.sep))
print(file_name_os)  # Output: directory

# Using pathlib.Path()
file_path_obj = Path(file_path)
file_name_pathlib = file_path_obj.name if file_path_obj.is_dir() else file_path_obj.parent.name
print(file_name_pathlib)  # Output: directory

The os.path.basename() method can handle this by stripping the directory separator at the end before processing. For pathlib, we check if the path is a directory; if so, we extract the name, otherwise, we use the parent directory’s name.

You may like the following Python tutorials:

In this Python tutorial, we discuss how to get the file name from the path in Python.

2 thoughts on “How to get file name from a path in Python?”

Comments are closed.