Compare Properties¶
import streamlit as st
import argparse
Two file names as arguments.
parser = argparse.ArgumentParser(description="Compare properties")
parser.add_argument("file1", help="1st file")
parser.add_argument("file2", help="2nd file")
args = parser.parse_args()
st.write(f"1st file: `{args.file1}`")
st.write(f"2nd file: `{args.file2}`")
Read properties
def read_properties(file_path):
properties = {}
with open(file_path, 'r') as file:
current_key = None
current_value = []
for line in file:
line = line.strip()
# Ignore comments and empty lines
if not line or line.startswith('#'):
continue
if '=' in line:
# If we were reading a multi-line value, save the previous key-value pair
if current_key is not None:
properties[current_key] = ' '.join(current_value).replace("\\", "").strip()
# Start a new key-value pair
current_key, value = line.split('=', 1)
current_key = current_key.strip()
current_value = [value.strip()]
else:
# Continue with a multi-line value
current_value.append(line.strip())
# Save the last key-value pair
if current_key is not None:
properties[current_key] = ' '.join(current_value).replace("\\", "").strip()
return properties
Compare properties
def compare_properties(file1, file2):
# Read the properties from both files
props1 = read_properties(file1)
props2 = read_properties(file2)
# Convert keys to sets for comparison
keys1 = set(props1.keys())
keys2 = set(props2.keys())
# Determine added, deleted, and changed properties
added = keys2 - keys1
deleted = keys1 - keys2
changed = {key for key in keys1 & keys2 if props1[key] != props2[key]}
# Output results
st.write(f"### Added Properties `({len(added)})`:")
for key in added:
st.write(f" **{key}** = `{props2[key]}`")
st.write(f"### Deleted Properties `({len(deleted)})`:")
for key in deleted:
st.write(f" **{key}** = `{props1[key]}`")
st.write(f"### Changed Properties `({len(changed)})`:")
for key in changed:
st.write(f"""
**{key}**:
```
`{props1[key]}`
`{props2[key]}`
```
""")
Main
compare_properties(args.file1, args.file2)