在dna序列中进行反向互补的功能

时间:2014-04-02 17:27:33

标签: python regex algorithm function

我正在尝试创建一个在我已经拥有的程序中运行的函数。我在dna序列中做出反向恭维。这是我现在拥有的。

for line in infile:
    line = line.strip()
    if line[0] == '>':
            outfile.write(line+'\n')
    else:
            line = line.upper().replace(' ','')
            if re.search('[^ACTG]', line) is None:
                    line = re.sub('A', 'F', line)
                    line = re.sub('T', 'A', line)
                    line = re.sub('F', 'T', line)
                    line = re.sub('G', 'Y', line)
                    line = re.sub('C', 'G', line)
                    line = re.sub('Y', 'C', line)
                    line = line[::-1]
                    outfile.write(line+'\n')
            else:
                    outfile.write('ERROR'+'\n')

如何使用

等格式将功能添加到此程序中
def codon(infile):
      for line in infile:
return something

这可能很简单我是新手。感谢。

4 个答案:

答案 0 :(得分:1)

代码没有看到返回任何内容,它只写入outfile,所以你可以这样做:

def codon(infile):
    for line in infile:
        line = line.strip()
        if line[0] == '>':
                outfile.write(line+'\n')
        else:
                line = line.upper().replace(' ','')
                if re.search('[^ACTG]', line) is None:
                        line = re.sub('A', 'F', line)
                        line = re.sub('T', 'A', line)
                        line = re.sub('F', 'T', line)
                        line = re.sub('G', 'Y', line)
                        line = re.sub('C', 'G', line)
                        line = re.sub('Y', 'C', line)
                        line = line[::-1]
                        outfile.write(line+'\n')
                else:
                        outfile.write('ERROR'+'\n')
    return

甚至删除return语句。

希望这会有所帮助。

答案 1 :(得分:1)

不确定您是否正在考虑使用此功能返回。您可以返回一个列表,表示序列的完全反向补充(除了编写“outfile”),但如果您不想这样做,那么也许您不需要返回任何内容。

无论哪种方式,它看起来都像这样:

def codon(infile, outfile):
    for line in infile:
        # the rest of your code goes here.
    return something # Remember to indent your return statement.

答案 2 :(得分:1)

而不是写入文件,将其保存在数组中,然后按照您的方式编写

假设文件不是非常大

def codon(infile):
    outlines = []
    ... # your stuff
                        outlines.append(line+'\n')
                else:
                        outlines.append('ERROR'+'\n')
    ... # more stuff
    return outlines

答案 3 :(得分:1)

要将当前代码转换为返回结果的函数(除了写出文件外),您还可以使用以下代码:

def codon(infile):
    all_lines = []
    for line in infile:
        line = line.strip()
        if line[0] == '>':
                pass
        else:
                line = line.upper().replace(' ','')
                if re.search('[^ACTG]', line) is None:
                        line = re.sub('A', 'F', line)
                        line = re.sub('T', 'A', line)
                        line = re.sub('F', 'T', line)
                        line = re.sub('G', 'Y', line)
                        line = re.sub('C', 'G', line)
                        line = re.sub('Y', 'C', line)
                        line = line[::-1]
                else:
                        line = 'ERROR'
         all_lines.append(line)
         outfile.write(line + '\n')
    return all_lines

它会在处理和写出后为您提供包含所有行的列表。 我还重构了只在你的逻辑结束时写出来。由于您可能不希望在结果中使用'\n',因此我只会在使用outfile输出时将其添加到最后。将该行附加到all_lines列表时,您可能不需要'\n'

pass行告诉python你不想在这种情况下做任何有趣的事情。你可以否定你的测试,只处理else条款中的内容:

def codon(infile):
    for line in infile:
        line = line.strip()
        if line[0] != '>':
                line = line.upper().replace(' ', '')
                ...