2012-04-21 162 views
3

我需要创建一个名为extractGenes.py可选参数Python?

命令行参数需要采取2个OR 3参数的程序:

  1. -s是一个可选参数,或开关,指示用户wwants的剪接的基因序列(去除内含子)。该用户没有提供这个(意思是,他希望整个基因序列),但他没有提供它,然后它必须是第一个参数

  2. 输入文件(基因)

  3. 输出文件(程序将创建存储的fasta文件

该文件包含这样的线路:

NM_001003443 chr11 + 5925152 592608098 2 5925152,5925652, 5925404,5926898, 

不过,我不是确定如何将-s可选参数包含到启动功能中。

于是我开始:

getGenes(-s, input, output): 
fp = open(input, 'r') 
wp = open(output, "w") 

,但我不能确定如何包括-s

回答

3

这种情况是很简单的直接使用sys.argv

import sys 

spliced = False 
if '-s' in sys.argv: 
    spliced = True 
    sys.argv.remove('-s') 
infile, outfile = sys.argv[1:] 

另外,您还可以使用更强大的工具,如argparseoptparse生成一个命令行解析器:

import argparse 

parser = argparse.ArgumentParser(description='Tool for extracting genes') 
parser.add_argument('infile', help='source file with the genes') 
parser.add_argument('outfile', help='outfile file in a FASTA format') 
parser.add_argument('-s', '--spliced', action='store_true', help='remove introns') 

if __name__ == '__main__': 
    result = parser.parse_args('-s myin myout'.split()) 
    print vars(result) 
+0

这就是我一直在寻找的,感谢所有的帮助! – 2012-04-21 17:57:32

+0

乐意帮忙:-) – 2012-04-21 19:27:43

+0

@RaymondHettinger,很好,我以前没有用过argparse。顺便说一句,我看到你在PyCon上谈论简单的AI,它很棒。 – zallarak 2012-04-22 19:13:40

2

Argparse是一个Python库,它可以为您处理可选的参数。 http://docs.python.org/library/argparse.html#module-argparse

+0

我对Python来说是新的并且不确定如何将argparse合并到程序中。我理解上面的评论,但因为我需要-s成为第一个参数,所以我不明白如何使它成为条件... – 2012-04-21 16:57:18

+1

@PatrickCampbell - dm在我输入我的答案时回答,但我的解决方案正好使用他建议的图书馆(这确实是**图书馆在这种情况下使用的...) – mac 2012-04-21 17:00:30

+0

谢谢!!!!!! – 2012-04-21 17:02:02

0

尝试这样:

def getGenes(input, output, s=False): 
    if s: 
     ... 
    else: 
     ... 

如果你输入2个参数,S会是虚假的; getGenes(输入,输出)

如果使用3个参数调用getGenes(),s将是第3个参数,因此在这种情况下使用任何非False值调用它都会产生else子句。

+0

这里的问题是,无论什么原因,-s必须是第一个参数 – 2012-04-21 16:55:19

+0

@PatrickCampbell为什么,为什么命令行上的参数顺序必须反映程序中某个函数的参数顺序? – delnan 2012-04-21 16:58:10

+0

我真的不知道为什么顺序很重要,我希望我不必这样做,但我被指示...... – 2012-04-21 17:02:37