次のスクリプトがあるとします。
import csv
import re
#this script is designed to take a list of probe files and
#generate a corresponding swarm file for blasting them against
#some user defined database.
def __main__():
#args
infile = sys.argv[1] #list of sequences to run
outfile = sys.argv[2] #location of resulting swarm file
outdir = sys.argv[3] #location to store results from blast run
db = sys.argv[4] #database to query against
with open(infile) as fi:
data = [x[0].strip('\n') for x in list(csv.reader(fi))]
cmd = open(outfile, 'w')
blast = 'module load blast/2.2.26; blastall -v 5 -b 5 -a 4 -p blastn '
db = ' -d ' + db
def f(x):
input = ' -i ' + str(x)
out = re.search('(?<=./)([^\/]*)(?=\.)', x).group(0)
out = ' -o ' + outdir + out + '.out'
cmd.write(blast + db + input + out + '\n')
map(f, data)
__main__()
私がそれを実行すると:
python blast-probes.py /data/cornishjp/array-annotations/agilent_4x44k_human/probe-seq-fasta-list.csv ./human.cmd ./ x
human.cmd の例は次のようになります。
module load blast/2.2.26; blastall -v 5 -b 5 -a 4 -p blastn -d x -i /data/corni
shjp/array-annotations/agilent_4x44k_human/probe-seqs/A_33_P3344603.fas -o ./A_3
3_P3344603.out
私がそれを実行すると:
python blast-probes.py /data/cornishjp/array-annotations/agilent_4x44k_mouse/probe-seq-fasta-list.csv ./mouse.cmd ./ x
mouse.cmd の例は次のようになります。
module load blast/2.2.26; blastall -v 5 -b 5 -a 4 -p blastn -d x -i /data/cornishp/array-annotations/agilent_4x44k_mouse/probe-seqs/A_51_P100327.fas -o ./A_51_P100327.out
違いは、の末尾が の場合agilent_4x44k_
、human
ディレクトリは でファイルに正しく書き込まれますcornishjp
。末尾が のmouse
場合、ディレクトリは と誤って記述されておりcornishp
、が省略さj
れています。私はすべてを交換しました(人間をmouse.cmdとして保存するなど)が、一生それを理解することはできません。
頭に浮かぶ唯一のことは、Python スクリプトの引数を生成するときに、タブを使用してオートコンプリート (Linux) することです。これが問題でしょうか?スクリプトが失敗するため、入力ファイルを正しく読み取っています。