如何在iPython笔记本中调用使用argparse编写的模块
我试图在iPython的笔记本环境中将BioPython序列传递给Ilya Stepanov在Ukkonen后缀树算法中的实现。 我在argparse组件上磕磕绊绊。
我从来没有必须直接处理argparse。 如何在不重写main()的情况下使用它?
由此,这个Ukkonen算法的写法非常棒。
我以前有类似的问题,但使用optparse
而不是argparse
。
您不需要更改原始脚本中的任何内容,只需将如下所示的新列表分配给sys.argv
:
if __name__ == "__main__":
from Bio import SeqIO
path = '/path/to/sequences.txt'
sequences = [str(record.seq) for record in SeqIO.parse(path, 'fasta')]
sys.argv = ['-f'] + sequences
main()
在Ipython笔记本中使用argparse的替代方法是将字符串传递给:
args = parser.parse_args()
(您引用的git args = parser.parse_args()
第303行)。
会是这样的:
parser = argparse.ArgumentParser(
description='Searching longest common substring. '
'Uses Ukkonen's suffix tree algorithm and generalized suffix tree. '
'Written by Ilya Stepanov (c) 2013')
parser.add_argument(
'strings',
metavar='STRING',
nargs='*',
help='String for searching',
)
parser.add_argument(
'-f',
'--file',
help='Path for input file. First line should contain number of lines to search in'
)
和
args = parser.parse_args("AAA --file /path/to/sequences.txt".split())
编辑:它的工作
我最终使用BioPython来提取序列,然后编辑Ilya Steanov的实现来删除argparse方法。
import imp
seqs = []
lcsm = imp.load_source('lcsm', '/path/to/ukkonen.py')
for record in SeqIO.parse('/path/to/sequences.txt', 'fasta'):
seqs.append(record)
lcsm.main(seqs)
对于算法,我有main()
接受一个参数,他的strings
变量,但是这会向算法发送一个特殊的BioPython序列对象列表,这是re模块不喜欢的。 所以我不得不提取序列字符串
suffix_tree.append_string(s)
至
suffix_tree.append_string(str(s.seq))
这看起来很脆弱,但这就是我现在所拥有的一切。
链接地址: http://www.djcxy.com/p/40089.html上一篇: How to call module written with argparse in iPython notebook
下一篇: How to match and highlight all terms in any order from an array of strings?