Since you are using Python 2.7, use the argparse module instead of the older optparse
:
import argparse
import itertools as IT
VERSION = 0.1
version = "%(prog)s " + str(VERSION)
operation = {
'intersection': set.intersection,
'union': set.union,
'uniques': set.difference}
parser = argparse.ArgumentParser()
parser.add_argument('--version', action='version', version=version)
parser.add_argument('-i', '--featurefiles', nargs='+', help='Gene list',
metavar='FILE')
parser.add_argument('-o', '--outfile', help="output file (type determined by extension)",
metavar='FILE')
parser.add_argument('--op', dest="operation",
help="Intersection, Union & Uniques (default Intersection)",
default='intersection',
# can't use type=operation.get. See http://bugs.python.org/issue16516
type=lambda x: operation[x])
args = parser.parse_args()
print(args)
if args.outfile:
with open(args.outfile, 'w') as f:
for group_size in (len(args.featurefiles), 2):
for group in IT.combinations(args.featurefiles, group_size):
result = ''.join(sorted(reduce(
args.operation,
(set(open(filename))
for filename in group))))
f.write('{g}:\n{r}\n'.format(g=str(group), r=result))
You could call the script from the CLI like this:
script.py -i file1 file2 file3 --op uniques -o /tmp/out
References to tools used above: