如何在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?