Reflect the current year in all TechnoLibre license headers across script/, test/, and docker/. Generated by Claude Code 2.1.74 model claude-sonnet-4-6 Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
70 lines
2.1 KiB
Python
Executable file
70 lines
2.1 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
|
|
import argparse
|
|
import csv
|
|
import logging
|
|
import os
|
|
|
|
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_config():
|
|
"""Parse command line arguments, extracting the config file name,
|
|
returning the union of config file and command line arguments
|
|
|
|
:return: dict of config file settings and command line arguments
|
|
"""
|
|
# TODO update description
|
|
parser = argparse.ArgumentParser(
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
description="""\
|
|
Take two csv and show difference, intersection and complementarity
|
|
""",
|
|
epilog="""\
|
|
""",
|
|
)
|
|
parser.add_argument("--csv_1", required=True, help="CSV file first")
|
|
parser.add_argument("--csv_2", required=True, help="CSV file second")
|
|
parser.add_argument(
|
|
"--compare_key",
|
|
required=True,
|
|
help="Key to search and compare with it.",
|
|
)
|
|
args = parser.parse_args()
|
|
return args
|
|
|
|
|
|
def main():
|
|
config = get_config()
|
|
|
|
with open(config.csv_1, mode="r") as csv_file_1:
|
|
with open(config.csv_2, mode="r") as csv_file_2:
|
|
csv_reader_1 = csv.DictReader(csv_file_1)
|
|
csv_reader_2 = csv.DictReader(csv_file_2)
|
|
lst_csv_1 = [a.get(config.compare_key) for a in csv_reader_1]
|
|
lst_csv_2 = [a.get(config.compare_key) for a in csv_reader_2]
|
|
set_csv_1 = set(lst_csv_1)
|
|
set_csv_2 = set(lst_csv_2)
|
|
|
|
total = set_csv_1.union(set_csv_2)
|
|
same = set_csv_1.intersection(set_csv_2)
|
|
difference_1 = set_csv_1.difference(set_csv_2)
|
|
difference_2 = set_csv_2.difference(set_csv_1)
|
|
print(f"{len(total)} total")
|
|
print(f"{len(same)} same")
|
|
if same:
|
|
print(same)
|
|
print(f"{len(difference_1)} difference csv 1 to csv 2")
|
|
if difference_1:
|
|
print(difference_1)
|
|
print(f"{len(difference_2)} difference csv 2 to csv 1")
|
|
if difference_2:
|
|
print(difference_2)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|