The os.path
module in Python provides functions for interacting with the file system. It is a submodule of the os
module and contains functions to manipulate file paths and directories.
Table of Contents
- Introduction
- Key Functions
abspath
basename
commonpath
commonprefix
dirname
exists
expanduser
expandvars
getatime
getctime
getmtime
getsize
isabs
isdir
isfile
join
normpath
realpath
relpath
split
splitdrive
splitext
- Examples
- Basic Path Operations
- File and Directory Checks
- Path Manipulations
- Real-World Use Case
- Conclusion
- References
Introduction
The os.path
module provides a range of functions to manipulate and query file system paths. It is particularly useful for writing cross-platform code, as it automatically handles the differences between Unix-like and Windows path conventions.
Key Functions
abspath
Returns the absolute path of a given path.
import os
print(os.path.abspath('file.txt')) # /home/user/file.txt or C:\Users\user\file.txt
basename
Returns the base name of a pathname.
print(os.path.basename('/home/user/file.txt')) # file.txt
commonpath
Returns the longest common sub-path of each pathname in the given sequence.
print(os.path.commonpath(['/home/user/file.txt', '/home/user/docs'])) # /home/user
commonprefix
Returns the longest common leading component of a list of pathnames.
print(os.path.commonprefix(['/home/user/file.txt', '/home/user/docs'])) # /home/user/
dirname
Returns the directory name of a pathname.
print(os.path.dirname('/home/user/file.txt')) # /home/user
exists
Returns True
if the path exists, False
otherwise.
print(os.path.exists('/home/user/file.txt')) # True or False
expanduser
Expands ~
and ~user
constructs.
print(os.path.expanduser('~')) # /home/user or C:\Users\user
expandvars
Expands environment variables in a pathname.
import os
print(os.path.expandvars('$HOME/file.txt')) # /home/user/file.txt or C:\Users\user\file.txt
getatime
Returns the last access time of a path.
print(os.path.getatime('/home/user/file.txt')) # 1618300800.0 (timestamp)
getctime
Returns the metadata change time of a path.
print(os.path.getctime('/home/user/file.txt')) # 1618300800.0 (timestamp)
getmtime
Returns the last modification time of a path.
print(os.path.getmtime('/home/user/file.txt')) # 1618300800.0 (timestamp)
getsize
Returns the size of a path, in bytes.
print(os.path.getsize('/home/user/file.txt')) # 1024 (size in bytes)
isabs
Returns True
if a path is absolute.
print(os.path.isabs('/home/user/file.txt')) # True
print(os.path.isabs('file.txt')) # False
isdir
Returns True
if a path is an existing directory.
print(os.path.isdir('/home/user')) # True or False
isfile
Returns True
if a path is an existing regular file.
print(os.path.isfile('/home/user/file.txt')) # True or False
join
Joins one or more path components intelligently.
print(os.path.join('/home/user', 'docs', 'file.txt')) # /home/user/docs/file.txt
normpath
Normalizes a pathname by collapsing redundant separators and up-level references.
print(os.path.normpath('/home/user/../user/docs//file.txt')) # /home/user/docs/file.txt
realpath
Returns the canonical path of the specified filename, resolving symbolic links.
print(os.path.realpath('/home/user/docs/file.txt')) # /home/user/docs/file.txt
relpath
Returns a relative filepath to path
from the current directory or an optional start
directory.
print(os.path.relpath('/home/user/docs/file.txt', '/home/user')) # docs/file.txt
split
Splits a pathname into a pair (head, tail)
where tail
is the last pathname component and head
is everything leading up to that.
print(os.path.split('/home/user/file.txt')) # ('/home/user', 'file.txt')
splitdrive
Splits a pathname into a pair (drive, tail)
where drive
is the drive letter and tail
is the rest of the path.
print(os.path.splitdrive('C:\\Users\\user\\file.txt')) # ('C:', '\\Users\\user\\file.txt')
splitext
Splits the pathname into a pair (root, ext)
where root
is the path without the extension and ext
is the file extension.
print(os.path.splitext('/home/user/file.txt')) # ('/home/user/file', '.txt')
Examples
Basic Path Operations
import os
path = '/home/user/file.txt'
print(os.path.abspath(path)) # /home/user/file.txt
print(os.path.basename(path)) # file.txt
print(os.path.dirname(path)) # /home/user
print(os.path.splitext(path)) # ('/home/user/file', '.txt')
File and Directory Checks
import os
path = '/home/user/file.txt'
if os.path.exists(path):
print(f"{path} exists")
if os.path.isfile(path):
print(f"{path} is a file")
if os.path.isdir(path):
print(f"{path} is a directory")
Path Manipulations
import os
base_dir = '/home/user'
sub_dir = 'docs'
filename = 'file.txt'
full_path = os.path.join(base_dir, sub_dir, filename)
print(full_path) # /home/user/docs/file.txt
relative_path = os.path.relpath(full_path, base_dir)
print(relative_path) # docs/file.txt
normalized_path = os.path.normpath('/home/user/../user/docs//file.txt')
print(normalized_path) # /home/user/docs/file.txt
Real-World Use Case
Organizing Files by Extension
import os
def organize_files_by_extension(directory):
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
extension = os.path.splitext(filename)[1][1:]
target_dir = os.path.join(directory, extension)
os.makedirs(target_dir, exist_ok=True)
os.rename(filepath, os.path.join(target_dir, filename))
organize_files_by_extension('/path/to/directory')
Conclusion
The os.path
module provides a comprehensive set of functions for manipulating file system paths. It simplifies many common tasks related to file and directory operations, making code more readable and maintainable.