[英]How to optimize my FASTA parser Python script in order to make it runs faster on slurm?
[英]How to fit parser in my python script
通常,如果必須在多個文件之間執行重疊,則只需執行以下命令:
python -c 'import sys;print "".join(sorted(set.intersection(*[set(open(a).readlines()) for a in sys.argv[1:]])))' File1 File2 File3 File4 ....
但是,如果我必須通過解析器來獲取它,該怎么辦呢?
一個簡短的例子就足以解決這個腳本了,之后我就可以玩了。 實際上,我希望用戶提供兩個輸入:要在其上執行ioperation的文件以及此處的操作是交集。
請幫助,而不是投票關閉該職位。
我想我必須證明自己在做什么,這是一個例子:
usage = "Usage: %prog -i <file1>[,<file2>,...] -o <out> -ops "
version = "%prog " + str(VERSION)
parser = OptionParser(version=version, usage=usage)
group1 = OptionGroup(parser, 'Optional')
parser.add_option("-i",
dest="featurefile",
help="Gene list",
metavar="FILE")
parser.add_option("-o",
dest="outfile",
help="output file (type determined by extension)",
metavar="FILE")
# Optional arguments
group1.add_option("--op",
dest="operation",
help="Intersection, Union & Uniques (default Intersection)",
default=None,
type="string")
parser.add_option_group(group1)
(options, args) = parser.parse_args()
現在這個集合是解析器(完成),第二步是獲取操作(交集)和文件並執行它們。 在這一步,我迷路了。
謝謝
由於您使用的是Python 2.7,因此請使用argparse模塊,而不要使用較早的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))
您可以像這樣從CLI調用腳本:
script.py -i file1 file2 file3 --op uniques -o /tmp/out
對上面使用的工具的引用:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.