【问题标题】:Building a DNA sequence generator构建 DNA 序列生成器
【发布时间】:2014-02-11 16:11:49
【问题描述】:

我刚开始在生物信息学研究实验室学习 python。我的第一个项目是生成一个程序,该程序可以输出具有长度和拷贝数参数的各种 DNA 序列。然后需要以 FASTA 格式输出序列。

对于那些不熟悉的人,DNA 序列可以由四个“字母”组成:A、G、C、T。 示例 DNA 序列:ACGTTCCGTACGTACTCT

我对这一切真的很陌生,我想要一些关于如何去做以及如何学习 Python 的建议(依靠教程,做随机项目等)。

我目前正在使用别人的程序进行我的 DNA 序列项目,然后我将逐行查看正在做的事情。

我在复制代码时遇到的第一个错误是:

    >>> import random
    >>> import sys
    >>> def simulate_sequence (length) :
        dna = ['A','G','C','T']
        sequence = ''
        for i in range (length) :
            sequence += random.choice (dna)
        return sequence

    >>> setsize = int (sys.argv[1])
    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        setsize = int (sys.argv[1])
    IndexError: list index out of range
    >>> 

谢谢。

【问题讨论】:

  • 您需要使用指定序列长度的 CLI 参数调用此代码。
  • 不幸的是,如果没有对基础知识的基本了解,复制代码根本没有多大意义。我建议你在潜入之前拿起一本书。
  • 从官方教程开始,它包含你需要知道的一切! docs.python.org/2.7/tutorial/index.html
  • 不知道原代码是谁写的,但simulate_sequence函数无非就是''.join(random.choice('AGCT') for _ in range(length))
  • 谢谢大家。我浏览了thenewboston 的python 教程。我对正在发生的事情有一个基础,但我有很多练习......我想我会在我的实验室从事项目的同时继续阅读 Python 书籍。

标签: python random generator bioinformatics dna-sequence


【解决方案1】:

sys.argv 是传递给程序的参数列表。

例如这个程序(称为amt.py):

import sys
print (sys.argv)

会有这样的行为:

$ ./amt.py
['./amt.py']
$ ./amt.py 1
['./amt.py', '1']
$ ./amt.py 1 abc
['./amt.py', '1', 'abc']
$ ./amt.py 1 abc 33
['./amt.py', '1', 'abc', '33']

您的代码的问题是它期望sys.argv 在索引1 处有一个项目,但您没有给它任何命令行参数。因此它会尝试转到列表中不存在的位置。

【讨论】:

    【解决方案2】:

    首先,我会推荐this book

    这个错误是因为这个程序是从命令行运行的,而不是为解释器运行的。 sys.argv[1] 获取第一个命令行参数(嗯,技术上是第二个,因为第一个是程序的名称)。在解释器中,您不能指定参数。只需将其粘贴到文本编辑器中,然后从命令行运行它,例如:DNA.py 100

    【讨论】:

      【解决方案3】:

      我为此使用了 biopython:

      def random_seq(N=180):
          return Seq("".join(random.choice("ATCG") for _ in range(N)))
      

      【讨论】:

        【解决方案4】:
        dna = ['A','G','C','T']
        def generateDNA(N):
           result= [random.choice(dna) for i in np.arange(N)]
           return("".join(result))
        
        print(generateDNA(100))
        

        输出:

        TTCGCGGACGGTTCATCAGCCCTAGCCGGTTAAGAACTATCGAGCCACCCTAAGAACGGTCCATATTTGGAGTGTTACAACTTTGGATCTTCTACGTTGC

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-19
          • 1970-01-01
          相关资源
          最近更新 更多