簡體   English   中英

在dna序列中產生反向稱贊的功能

[英]Function that makes the reverse compliment in a dna sequence

我試圖使一個函數在我已經擁有的程序中運行。 我在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

這可能很簡單,我是新手。 謝謝。

該代碼看不到返回任何內容,它僅寫入一個外文件,因此您可以執行以下操作:

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語句。

希望這可以幫助。

不確定使用此功能返回的想法。 您可以返回一個表示該序列完全反向互補的列表(除了編寫“ outfile”),但是如果您不想這樣做,那么也許就不需要返回任何東西。

無論哪種方式,它看起來都是這樣的:

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

而不是寫入文件,而是將其保存在數組中,然后按照自己的意願寫

假設文件不是非常大

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

要將當前代碼轉換為返回結果(除了寫出文件)的函數,可以使用以下命令:

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子句中的else

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM