【问题标题】:Cutting out dictionary file defined regions of a FASTA gene sequence删除 FASTA 基因序列的字典文件定义区域
【发布时间】:2022-10-01 08:37:30
【问题描述】:

对 Python 和一般编码非常陌生,所以请随意大笑。我想使用以下格式的txt文件(dict),第一列中的基因和序列区域(起始位置结束位置)

ORFB    21563 25384
ORF3a   25393 26220
ORF2a   26245 26472
ORF10   29558 29674
S   21563 25384
E   26245 26472

从 Genbank (GENE.fasta.txt) 读取一个 FASTA DNA 文件,这样输出将是基因名称,然后是每个基因的开始和停止之间的序列。

我尝试了以下...没有运气。我真的很想学习,而不仅仅是获得代码。任何帮助是极大的赞赏。

with open(\'dict.txt\') as f:
    ranges = {ID: (int(start), int(stop)) for ID, start, stop in map(lambda s: s.strip().split(), f)}

from Bio import SeqIO
with open (\'GENE.fasta.txt\') as handle:
    out = [r[slice(*ranges[r.id])] for r in SeqIO.parse(handle, \'fasta\')]

with open(\'output.fasta\', \'w\') as handle:
    SeqIO.write(out, handle, \'fasta\')
  • “没有运气”是什么意思?乍一看,您的代码看起来应该可以正常工作
  • 对于那个很抱歉。我一直收到 KeyError: \'MN908947.3\' FASTA 文件是 MN908947.3 严重急性呼吸综合征冠状病毒 2 分离株武汉-Hu-1,全基因组

标签: python bioinformatics fasta dna-sequence


【解决方案1】:

您正在将地图应用于文件对象。 你必须做这样的事情:

with open('dict.txt') as f:
    ranges = {
        ID: (int(start), int(stop))
        for ID, start, stop
        in map(lambda line: line.strip().split(), f.readlines())
    }

readlines 方法返回文件中的行列表。使用列表理解可能更具可读性:[line.strip().split() for line in f.readlines()]

我希望我有所帮助

【讨论】:

  • 谢谢您的答复!我试过了,但我不断收到 KeyError: 'MN908947.3'
  • FASTA 文件为 MN908947.3 严重急性呼吸综合征冠状病毒 2 分离株武汉-Hu-1,全基因组
  • 不幸的是,我不认为这解决了 OP 问题
【解决方案2】:

显然 MN908947.3 不是您第一步构建的 ID

所以当你尝试做ranges[r.id]它不存在

你可以也许做一些更像

with open ('GENE.fasta.txt') as handle:
    out = [r[slice(*ranges[r.id])] for r in SeqIO.parse(handle, 'fasta') if r.id in ranges]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多