Mercurial > repos > kkonganti > cfsan_cronology
annotate 0.2.0/bin/qual_confirm.py @ 11:a5f31c44f8c9
planemo upload
author | kkonganti |
---|---|
date | Mon, 15 Jul 2024 16:11:44 -0400 |
parents | |
children |
rev | line source |
---|---|
kkonganti@11 | 1 #!/usr/bin/env python3 |
kkonganti@11 | 2 |
kkonganti@11 | 3 # Kranti Konganti |
kkonganti@11 | 4 |
kkonganti@11 | 5 import argparse |
kkonganti@11 | 6 import inspect |
kkonganti@11 | 7 import logging |
kkonganti@11 | 8 import os |
kkonganti@11 | 9 import pprint |
kkonganti@11 | 10 |
kkonganti@11 | 11 |
kkonganti@11 | 12 # Multiple inheritence for pretty printing of help text. |
kkonganti@11 | 13 class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter): |
kkonganti@11 | 14 pass |
kkonganti@11 | 15 |
kkonganti@11 | 16 |
kkonganti@11 | 17 # Main |
kkonganti@11 | 18 def main() -> None: |
kkonganti@11 | 19 """ |
kkonganti@11 | 20 This script takes as input two files containing non whitespace lines and will |
kkonganti@11 | 21 output lines if it is present in both files. |
kkonganti@11 | 22 """ |
kkonganti@11 | 23 |
kkonganti@11 | 24 # Set logging. |
kkonganti@11 | 25 logging.basicConfig( |
kkonganti@11 | 26 format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n\n", |
kkonganti@11 | 27 level=logging.DEBUG, |
kkonganti@11 | 28 ) |
kkonganti@11 | 29 |
kkonganti@11 | 30 # Debug print. |
kkonganti@11 | 31 ppp = pprint.PrettyPrinter(width=55) |
kkonganti@11 | 32 prog_name = os.path.basename(inspect.stack()[0].filename) |
kkonganti@11 | 33 |
kkonganti@11 | 34 parser = argparse.ArgumentParser( |
kkonganti@11 | 35 prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses |
kkonganti@11 | 36 ) |
kkonganti@11 | 37 |
kkonganti@11 | 38 required = parser.add_argument_group("required arguments") |
kkonganti@11 | 39 |
kkonganti@11 | 40 required.add_argument( |
kkonganti@11 | 41 "-f1", |
kkonganti@11 | 42 dest="file1", |
kkonganti@11 | 43 default=False, |
kkonganti@11 | 44 required=True, |
kkonganti@11 | 45 help="Absolute UNIX path to file no. 1 containing\nnon white space lines.", |
kkonganti@11 | 46 ) |
kkonganti@11 | 47 required.add_argument( |
kkonganti@11 | 48 "-f2", |
kkonganti@11 | 49 dest="file2", |
kkonganti@11 | 50 default=False, |
kkonganti@11 | 51 required=True, |
kkonganti@11 | 52 help="Absolute UNIX path to file no. 2 containing\nnon white space lines.", |
kkonganti@11 | 53 ) |
kkonganti@11 | 54 parser.add_argument( |
kkonganti@11 | 55 "-out", |
kkonganti@11 | 56 dest="outfile", |
kkonganti@11 | 57 default="accs_passed.txt", |
kkonganti@11 | 58 help="The following output file will be created in\nthe current working directory.", |
kkonganti@11 | 59 ) |
kkonganti@11 | 60 |
kkonganti@11 | 61 args = parser.parse_args() |
kkonganti@11 | 62 f1 = args.file1 |
kkonganti@11 | 63 f2 = args.file2 |
kkonganti@11 | 64 out = args.outfile |
kkonganti@11 | 65 f1d = dict() |
kkonganti@11 | 66 f2d = dict() |
kkonganti@11 | 67 |
kkonganti@11 | 68 # Basic checks |
kkonganti@11 | 69 |
kkonganti@11 | 70 if not (os.path.exists(f1) and os.path.exists(f2)): |
kkonganti@11 | 71 logging.error( |
kkonganti@11 | 72 f"File {os.path.basename(f1)} or" + f"\nFile {os.path.basename(f2)} does not exist." |
kkonganti@11 | 73 ) |
kkonganti@11 | 74 exit(1) |
kkonganti@11 | 75 elif not (os.path.getsize(f1) > 0 and os.path.getsize(f2) > 0): |
kkonganti@11 | 76 logging.error( |
kkonganti@11 | 77 f"File {os.path.basename(f1)} or" + f"\nFile {os.path.basename(f2)} is empty." |
kkonganti@11 | 78 ) |
kkonganti@11 | 79 exit(1) |
kkonganti@11 | 80 |
kkonganti@11 | 81 with open(f1, "r") as f1_fh: |
kkonganti@11 | 82 for line in f1_fh: |
kkonganti@11 | 83 f1d[line.strip()] = 1 |
kkonganti@11 | 84 |
kkonganti@11 | 85 with open(f2, "r") as f2_fh: |
kkonganti@11 | 86 for line in f2_fh: |
kkonganti@11 | 87 f2d[line.strip()] = 1 |
kkonganti@11 | 88 |
kkonganti@11 | 89 big = f1d |
kkonganti@11 | 90 small = f2d |
kkonganti@11 | 91 |
kkonganti@11 | 92 if len(f1d.keys()) < len(f2d.keys()): |
kkonganti@11 | 93 big = f2d |
kkonganti@11 | 94 small = f1d |
kkonganti@11 | 95 |
kkonganti@11 | 96 with open(out, "w") as out_fh: |
kkonganti@11 | 97 for line in small.keys(): |
kkonganti@11 | 98 if line in big.keys(): |
kkonganti@11 | 99 out_fh.write(line + "\n") |
kkonganti@11 | 100 |
kkonganti@11 | 101 f1_fh.close() |
kkonganti@11 | 102 f2_fh.close() |
kkonganti@11 | 103 out_fh.close() |
kkonganti@11 | 104 |
kkonganti@11 | 105 |
kkonganti@11 | 106 if __name__ == "__main__": |
kkonganti@11 | 107 main() |