2012-04-21 73 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