How to Handle Comments in YAML Files using Python
Handling comments in YAML files ensures that your configurations remain understandable and maintainable.
In this tutorial, you’ll learn how to manage comments in YAML files using Python.
Read YAML Files While keeping Comments
To preserve comments when reading YAML files, use the ruamel.yaml
library.
from ruamel.yaml import YAML yaml = YAML() with open('config.yaml') as f: data = yaml.load(f) print(data)
Output:
{'database': {'host': 'localhost', 'port': 3306}, 'users': ['Ahmed', 'Fatima', 'Omar']}
This code reads the YAML file config.yaml
while retaining all comments.
Insert Comments into Specific Locations
You can insert comments before a particular mapping or sequence item using ruamel.yaml
.
from ruamel.yaml import YAML from ruamel.yaml.comments import CommentedMap yaml = YAML() with open('config.yaml') as f: data = yaml.load(f) data.yaml_set_comment_before_after_key('users', before='List of authorized users') with open('config.yaml', 'w') as f: yaml.dump(data, f)
Output:
database: host: localhost port: 3306 password: securepassword # List of authorized users users: - Ahmed - Fatima - Omar
This code adds a specific comment before the users
key.
Add Comments to Anchors and Aliases
You can add comments to anchors and aliases using yaml_set_comment_before_after_key
:
from ruamel.yaml import YAML from ruamel.yaml.comments import CommentedMap new_data = CommentedMap() yaml = YAML() with open('config.yaml') as f: data = yaml.load(f) new_data['database'] = data['database'] new_data.yaml_set_comment_before_after_key('database', before='This is the default database configuration') with open('data.yaml', 'w') as f: yaml.dump(data, f)
Output:
database: &default host: localhost port: 3306 password: securepassword # Default database settings default: *default users: - Ahmed - Fatima - Omar
Here, a comment is added before the default
anchor.
Modify Existing Comments
You can modify existing comments to update or clarify information.
from ruamel.yaml import YAML yaml = YAML() with open('config.yaml') as f: data = yaml.load(f) data.yaml_add_eol_comment('Updated list of users', key='users', column=0) with open('config.yaml', 'w') as f: yaml.dump(data, f)
Output:
database: host: localhost port: 3306 password: securepassword users: # Updated list of users - Ahmed - Fatima - Omar
This script updates the end-of-line comment for the users
key.
Handle Block Comments in Sequences
You can insert a comment before the first item in a list using yaml_set_comment_before_after_key
:
from ruamel.yaml import YAML yaml = YAML() with open('data.yaml') as f: data = yaml.load(f) data['users'].yaml_set_comment_before_after_key(0, before='Primary user') with open('data.yaml', 'w') as f: yaml.dump(data, f)
Output:
database: host: localhost port: 3306 password: securepassword users: # Primary user - Ahmed - Fatima - Omar
A comment is inserted before the first item in the users
list.
Add Multi-line Comments
Adding multi-line comments enhances detailed explanations within the YAML file.
from ruamel.yaml import YAML yaml = YAML() with open('config.yaml') as f: data = yaml.load(f) multi_line_comment = """\ This section defines the database configuration. Ensure that the host and port are correctly set. """ data.yaml_set_comment_before_after_key('database', before=multi_line_comment) with open('config.yaml', 'w') as f: yaml.dump(data, f)
Output:
# This section defines the database configuration. # Ensure that the host and port are correctly set. database: host: localhost port: 3306 password: securepassword users: # Primary user - Ahmed - Fatima - Omar
A detailed multi-line comment is added before the database
section.
Mokhtar is the founder of LikeGeeks.com. He is a seasoned technologist and accomplished author, with expertise in Linux system administration and Python development. Since 2010, Mokhtar has built an impressive career, transitioning from system administration to Python development in 2015. His work spans large corporations to freelance clients around the globe. Alongside his technical work, Mokhtar has authored some insightful books in his field. Known for his innovative solutions, meticulous attention to detail, and high-quality work, Mokhtar continually seeks new challenges within the dynamic field of technology.