Skip to main content

does basic diff-ing of YAML files while ignoring key-order

Project description


Ever needed to compare two YAML files, when the keys were out of order?
Maybe you've tried cutting and pasting to move the keys around, wondering if there's a better way?
Well, now there is - yam_sort!

Okay, I may have been watching too much late-night TV. But this library was born out of frustration working with YAML files. I was using AWS API-Gateway YAML templates, which sometimes get exported in random order (especially when there are changes to it), making it hard to compare with git-checked-in copies. After the nth time moving keys around, I decided to automate it.

  • Do basic diff-ing of YAML files, while ignoring the order of keys/sub-keys.
  • Re-order a second dictionary/YAML file, to match the first file. Ignore missing keys, move extra keys to end of list.

This is a very narrowly-focussed library - it sorts one YAML file to match the key-order in another YAML file. But I don't know of any other automated way of doing this, and got tired of doing it manually.

Pip Requirements

  • PyYAML==5.1.2
  • virtualenv (optional, but highly recommended)


# activate a virtual environment
pip install yam_sort


yam_sort -h  
yam_sort -s file_one file_two  # synchronizes second file with first, 
                                 writes to stdout
yam_sort -s file_one file_two -o  # synchronizes second file with first, 
                                    overwrites second file
yam_sort -k file_one file_two  # lists key-differences between files
optional arguments:
  -h, --help                                   show this help message and exit
  -s first second, --sync file_one file_two    sync two YAML files
  -o, --overwrite                              saves output to second file
  -k first second, --keys file_one file_two    diff two YAML files by keys only


Since the intent of this library is to compare YAML files that were exported from AWS API-Gateways, the resulting sorted-file has to be as similar as possible. This includes formatting of the keys/values in the file. AWS exports keys as unquoted, and all string-values as quoted. Therefore, this library copies the formatting from the original file, in the output-file. If a string was double-quoted, it will (should) be double-quoted in the output, and the same for single-quoting, etc.

Known Bugs

Some values can be multi-line, particularly in the section:

  • x-amazon-apigateway-gateway-responses:

These do not get properly copied over to the output-dict.

Project details

Release history Release notifications | RSS feed

This version


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yam_sort-1.0.tar.gz (6.7 kB view hashes)

Uploaded source

Built Distribution

yam_sort-1.0-py3-none-any.whl (8.0 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page