annotate 0.2.0/bin/qual_confirm.py @ 17:b571995ddb51

planemo upload
author kkonganti
date Mon, 15 Jul 2024 19:01:29 -0400
parents a5f31c44f8c9
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()