【问题标题】:Finding the longest ORF (open reading frame) in reading frame 2 in multiple sequences in a FASTA file在 FASTA 文件中的多个序列的阅读框 2 中查找最长的 ORF(开放阅读框)
【发布时间】:2020-04-15 15:31:44
【问题描述】:

我看到了一些关于这个领域问题的问题,但我无法用它来解决我的问题,尽管我花了好几个小时试图理解 Biopython 方法。

我可以用逻辑做到这一点,但我认为最好使用 Biopython。

我尝试使用我找到的代码:

f = open(r"C:\Users\97254\Downloads\dna2.fasta")
sequences = {}
count = 0
for line in f:
    line = line.rstrip()
    if line[0] == '>':
        count += 1
        first_row = line.split()
        name = first_row[0][1:]
        sequences[name] = ''
    else:
        sequences[name] = sequences[name] + line

startP = re.compile('ATG')
for sequence in sequences.values():
    sequence = squence[1:]
    longest = (0,)
    for m in startP.finditer(sequence):
        if len(Seq.Seq(sequence)[m.start():].translate(to_stop=True)) > longest[0]:
            pro = Seq.Seq(sequence)[m.start():].translate(to_stop=True)
            longest = (len(sequence[m.start():m.start()+len(pro)*3+3]), 
            m.start(), 
            sequence[m.start():m.start()+len(pro)*3+3])

我应该使用诸如 for 循环之类的逻辑,它以 3 的跳跃迭代序列,还是有 Biopythonic 的方法来做到这一点?

谢谢!

【问题讨论】:

标签: bioinformatics biopython fasta


【解决方案1】:

BioPython Tutorial and Cookbook contains the following code for finding open reading frames

from Bio import SeqIO
record = SeqIO.read("NC_005816.fna", "fasta")
table = 11
min_pro_len = 100

for strand, nuc in [(+1, record.seq), (-1, record.seq.reverse_complement())]:
    for frame in range(3):
        length = 3 * ((len(record)-frame) // 3) #Multiple of three
        for pro in nuc[frame:frame+length].translate(table).split("*"):
            if len(pro) >= min_pro_len:
                print("%s...%s - length %i, strand %i, frame %i" \
                      % (pro[:30], pro[-3:], len(pro), strand, frame))

输出:

GCLMKKSSIVATIITILSGSANAASSQLIP...YRF - length 315, strand 1, frame 0
KSGELRQTPPASSTLHLRLILQRSGVMMEL...NPE - length 285, strand 1, frame 1
GLNCSFFSICNWKFIDYINRLFQIIYLCKN...YYH - length 176, strand 1, frame 1
VKKILYIKALFLCTVIKLRRFIFSVNNMKF...DLP - length 165, strand 1, frame 1
NQIQGVICSPDSGEFMVTFETVMEIKILHK...GVA - length 355, strand 1, frame 2
RRKEHVSKKRRPQKRPRRRRFFHRLRPPDE...PTR - length 128, strand 1, frame 2
TGKQNSCQMSAIWQLRQNTATKTRQNRARI...AIK - length 100, strand 1, frame 2
QGSGYAFPHASILSGIAMSHFYFLVLHAVK...CSD - length 114, strand -1, frame 0
IYSTSEHTGEQVMRTLDEVIASRSPESQTR...FHV - length 111, strand -1, frame 0
WGKLQVIGLSMWMVLFSQRFDDWLNEQEDA...ESK - length 125, strand -1, frame 1
RGIFMSDTMVVNGSGGVPAFLFSGSTLSSY...LLK - length 361, strand -1, frame 1
WDVKTVTGVLHHPFHLTFSLCPEGATQSGR...VKR - length 111, strand -1, frame 1
LSHTVTDFTDQMAQVGLCQCVNVFLDEVTG...KAA - length 107, strand -1, frame 2
RALTGLSAPGIRSQTSCDRLRELRYVPVSL...PLQ - length 119, strand -1, frame 2

由于它直接来自教程,我认为这是查找 ORF 的最符合 Biopythonic 的方法。它还迭代“3 的跳跃”中的序列,但它使用 BioPython 函数 SeqIO.read() 来解析 fasta 文件。

【讨论】:

  • 我读到 read() 小说是针对单个记录的,而我在 FASTA 文件中有很多。
  • 对具有多条记录的 FASA 文件使用 Bio.SeqIO.parse()。它返回一个 SeqRecord 迭代器,所以你可以这样做:for record in SeqIO.parse("NC_005816.fna", "fasta"): ...
  • 每个输出行的框架和结尾(012)显示每个结果来自哪个阅读框架。
  • 我使用这段代码迭代每个序列并得到长度,但我的代码有问题,因为在我参加的课程考试中没有一个长度作为答案出现。我可以给你看一下代码吗?
  • @random 创建一个新问题,显示您尝试过的内容、获得的输出以及预期的输出(请参阅how to ask a good question)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多