annotate 0.1.0/bin/qual_confirm.py @ 5:6e5ceea33843

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