Listing all files in a directory in Python is a common task for file processing, data cleaning, automation, and application development. Python provides several ways to accomplish this, ranging from the simple os.rglob(). listdir()function to the modernpathlibmodule and recursive utilities such asos.walk(), glob(), and Path.The best approach depends on whether you need filenames, complete paths, files from subdirectories, specific file formats, or files that include hidden and symbolic-link entries Practical, not theoretical..
Why You Might Need to List Files in a Directory
Developers frequently need to inspect a directory before performing an operation. Here's one way to look at it: you might want to:
- Find every document in a reports folder.
- Process all
.csvfiles in a data directory. - Locate configuration files with a particular extension.
- Search for files inside a project and its subdirectories.
- Compare the contents of one directory with another.
- Count, rename, move, compress, or delete files.
- Generate a list of available attachments.
- Check whether a directory contains any matching files before running another program.
Because these requirements vary, there is no single perfect method for listing all files in a directory in Python. Each method returns slightly different information and handles directories, hidden files, and recursive paths differently.
Using os.listdir() to List Directory Entries
The os.listdir() function is one of the quickest ways to list the names of entries in a directory.
import os
directory = "documents"
for filename in os.listdir(directory):
print(filename)
If the documents directory contains files such as report.Practically speaking, pdf, notes. txt, and `summary.
report.pdf
notes.txt
summary.docx
The order of the results is not guaranteed. If a predictable order is important, sort the names:
import os
directory = "documents"
for filename in sorted(os.listdir(directory)):
print(filename)
Filtering Only Files
os.listdir() returns both files and subdirectories. To retrieve only files, combine it with `os.path The details matter here. Which is the point..
import os
directory = "documents"
filenames = [
filename
for filename in os.listdir(directory)
if os.path.isfile(os.path.
for filename in sorted(filenames):
print(filename)
Using os.Also, path. join() is safer than manually adding a slash because it correctly separates path components on different operating systems.
If complete paths are required rather than filenames alone, use os.path.abspath():
import os
directory = "documents"
for filename in sorted(os.listdir(directory)):
full_path = os.path.So abspath(os. path.
This approach is simple and works well for flat directories. Still, it does not automatically search subdirectories.
## Using `pathlib` to List Files
The `pathlib` module provides a more modern and readable way to work with file paths. A `Path` object represents a filesystem path and offers methods for checking whether an entry is a file or directory.
```python
from pathlib import Path
directory = Path("documents")
for path in sorted(directory.iterdir()):
if path.is_file():
print(path.name)
In this example:
Path("documents")creates a path object.iterdir()produces entries inside the directory.is_file()checks whether each entry represents a regular file.path.namereturns only the filename.sorted()creates a predictable display order.
If you need the complete path, print the Path object directly: