2016-12-05 192 views
0

我有一段很長的代碼來從fasta文件中提取數據,並用它們繪製圖形。我想使用argparse來調用程序並做它想要做的事情。但我有幾個問題,這是我迄今爲止所做的: import argparse 1.打開數據文件,通過raw_input打開它們 2.def爲圖創建條件 3.def grap的另一個條件 4.def makeamatrix 5.def plotmatrix 6.def mygraph #mygraph(對象A,對象B,A,J)用戶輸入用於生成圖形的文件

7.def主():

解析器= argparse.ArgumentParser(介紹=「創建我的點圖」)

parser.add_argument('--fileA',help="First file") 
parser.add_argument('--fileB', help='Second file') 
parser.add_argument('--objectA',help='my first ') 
parser.add_argument('--objectB',help='my second ')t 
parser.add_argument('--A',type=int) 
parser.add_argument('--J',type=float) 
args=parser.parse_args() 
mygraph(args.objectA,args.objectB,args.A,args.J) 
if __name__ == '__main__': 
main( 

我打電話的功能: myfunction.py --fileA --fileB,--a 1 --j 2 顯然,這是行不通的。我希望它能夠從文件中提取數據以生成圖形。否則有一種方法我可以稱爲我的功能爲: myfuchtion.py -fileA -fileB -A 1 -J 2,併產生圖?

回答

0

第一,而不是調用函數爲myfunction.py --fileA --fileB, --A 1 --J 2,你將需要通過數值爲--fileA--fileB選項:

myfunction.py --fileA /some/file --fileB /some/other/file --A 1 --J 2 

那麼你有沒有通過任何的--object選項。

此處顯示的代碼不使用--file選項,但如果它們保存數據,則需要打開它們並閱讀它們。例如:

with open(args.fileA) as f: 
    dataA = f.read() 

你可以​​使用type=argparse.FileType('r'),然後打開它們爲您提供:

dataA = args.fileA.read() 
args.fileA.close() 

,但你必須自己關閉它。

查看https://docs.python.org/2.7/library/argparse.html瞭解詳情。

在您的評論你問調用腳本

myfunction myfile myfile2 -A 1(or any other choice of number) -J 2 (or any number of my choice) 

這裏是你如何做到這一點與​​:

parser.add_argument('fileA',help="First file") 
parser.add_argument('fileB', help='Second file') 
parser.add_argument('-A',type=int) 
parser.add_argument('-J',type=float) 
args=parser.parse_args() 

如果調用腳本上面,然後

args.fileA"myfile"

args.fileB"myfile2"

args.A1

args.J2

因此,如果mygraph功能需要的文件名,這樣稱呼它:

mygraph(args.fileA, args.fileB, args.A, args.J) 

否則從文件中讀取數據,並取而代之的是,例如

with open(args.fileA) as f1: 
    data1 = f1.read() 
with open(args.fileB) as f2: 
    data2 = f2.read() 
mygraph(data1, data2, args.A, args.J) 

如果mygraph函數接受一個字符串,則可以使用。如果沒有,你將不得不將內容解析成你的功能需要的任何形式。

+0

我一直在閱讀所有的文檔,但對於初學者來說是壓倒性的。說實話,我不知道如何管理那個。是否有任何使用sys.arg,我可以更好地管理,以便能夠具體調用該函數:myfunction myfile myfile2 -A 1(或任何其他選擇的數字)-J 2(任何數量的我的選擇?) – Ana

+0

我的代碼打開兩個文件,從中提取數據,然後用提取的數據生成一個圖表。 – Ana

+0

在這種情況下,調用它的第一種方法應該可行。 –