How to list all files of a directory in python

Posted on

Listing all files in a directory using Python can be achieved using various methods from the os and os.path modules, or the Path object from the pathlib module in Python 3 and above. These methods allow you to retrieve a list of filenames within a specified directory path. This task is commonly used for file management, data processing, and automation scripts where accessing and iterating through files in a directory is necessary.

Using os.listdir()

Basic Usage
The os.listdir() function returns a list containing the names of the entries in the directory given by the path:

import os

directory = '/path/to/directory'
files = os.listdir(directory)
print(files)

Replace /path/to/directory with the actual path to the directory whose files you want to list.

Example
Listing files in the current directory:

import os

current_directory = os.getcwd()
files = os.listdir(current_directory)
print(files)

This prints a list of filenames in the current working directory.

Handling Absolute Paths
Ensure to use absolute paths to avoid issues with relative paths:

import os

directory = os.path.abspath('/path/to/directory')
files = os.listdir(directory)
print(files)

This retrieves filenames from the specified directory using its absolute path.

Using os.scandir()

Enhanced Functionality
The os.scandir() function provides more efficient and detailed directory scanning:

import os

directory = '/path/to/directory'
with os.scandir(directory) as entries:
    for entry in entries:
        if entry.is_file():
            print(entry.name)

This method offers better performance for large directories and additional file metadata.

Example
Iterating through directory entries:

import os

current_directory = os.getcwd()
with os.scandir(current_directory) as entries:
    for entry in entries:
        if entry.is_file():
            print(entry.name)

This prints filenames within the current working directory using os.scandir().

Using pathlib.Path

Modern Approach
With Python 3’s pathlib module, the Path object provides object-oriented file system path operations:

from pathlib import Path

directory = Path('/path/to/directory')
files = [entry.name for entry in directory.iterdir() if entry.is_file()]
print(files)

Replace /path/to/directory with the path to the directory you want to list files from.

Example
Listing files using Path object in the current directory:

from pathlib import Path

current_directory = Path.cwd()
files = [entry.name for entry in current_directory.iterdir() if entry.is_file()]
print(files)

This approach is cleaner and more Pythonic, utilizing Path objects for file listing.

Handling File Types and Attributes

Filtering by File Types
To filter only specific file types, use conditional checks within the iteration:

import os

directory = '/path/to/directory'
files = [file for file in os.listdir(directory) if file.endswith('.txt')]
print(files)

This example lists only .txt files from the specified directory.

Example
Filtering files by extension in the current directory:

import os

current_directory = os.getcwd()
txt_files = [file for file in os.listdir(current_directory) if file.endswith('.txt')]
print(txt_files)

This prints a list of .txt files in the current working directory.

File Attributes
Accessing file attributes like size and modification time can be done with os.stat() or pathlib.Path.stat():

import os

directory = '/path/to/directory'
for file in os.listdir(directory):
    file_path = os.path.join(directory, file)
    if os.path.isfile(file_path):
        file_size = os.path.getsize(file_path)
        file_modified = os.path.getmtime(file_path)
        print(f"File: {file}, Size: {file_size} bytes, Modified: {file_modified}")

This retrieves and prints file attributes for each file in the directory.

Example
Printing file attributes in the current directory:

import os

current_directory = os.getcwd()
for file in os.listdir(current_directory):
    file_path = os.path.join(current_directory, file)
    if os.path.isfile(file_path):
        file_size = os.path.getsize(file_path)
        file_modified = os.path.getmtime(file_path)
        print(f"File: {file}, Size: {file_size} bytes, Modified: {file_modified}")

This demonstrates accessing and displaying file attributes using os.path functions.

Recursive Directory Listing

Recursive Search
For recursively listing files in subdirectories, use os.walk():

import os

directory = '/path/to/directory'
for root, dirs, files in os.walk(directory):
    for file in files:
        print(os.path.join(root, file))

This traverses through all directories and subdirectories, listing all files.

Example
Recursive file listing in the current directory:

import os

current_directory = os.getcwd()
for root, dirs, files in os.walk(current_directory):
    for file in files:
        print(os.path.join(root, file))

This prints the paths of all files in the current directory and its subdirectories.

Best Practices

Error Handling
Implement error handling for directory access and file operations:

  • Try-except blocks: Handle exceptions when accessing directories or files.

Platform Compatibility
Ensure code portability across different operating systems:

  • Use os.path methods: Maintain compatibility with various file systems.

Performance Considerations
Optimize for large directories by choosing appropriate methods:

  • Use os.scandir(): For improved performance over os.listdir() with large directories.

By leveraging these methods and techniques, Python developers can effectively list and manipulate files within directories, supporting a wide range of file management and automation tasks.

Was this helpful?

Thanks for your feedback!