首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一行字母中找到序列

在一行字母中找到序列
EN

Stack Overflow用户
提问于 2022-06-20 10:00:49
回答 2查看 79关注 0票数 1

我使用mRNA,并希望识别mRNA行中的特定字母序列。mRNA是一串编码蛋白质的字母(可以表示为.txt或.fasta文件)。mRNA字符串由字母"A“、"U”、"G“和"C”组成,可以有数万个字母长。mRNA也可以在细胞中的腺嘌呤(A)特定序列上甲基化。在人类中,甲基化发生在序列"DR_A_CH",中,其中"D“可以表示字母A/G/U、"R"=A/G和"H"=U/A/C,如果我的数学是正确的,这将给出总共的3x2x3=18潜在字母组合。我想用Python编写一段代码,用mRNA字符串读取我的..txt/..fasta文件,扫描所有18个"DRACH“序列,列出它们并在序列中突出显示它们。

我创建了一个包含字符串:"AACGAUUCGACCGCAAGACUGGGCGAACCAUUCUAA“的模拟.txt文件(C:\rna\RNA_met.txt)

它有两个DRACH序列: AGACU和GAACC。

我没有进行任何编码,但我怀疑我的任务可以分解为子任务。子任务1将使程序“读取”我的.txt文件。第二个任务是教程序识别DRACH序列。第三个任务是使python显示带有突出显示的DRACH序列的mRNA字符串。

对于子任务1,我在Spyder中打印了以下代码:

代码语言:javascript
运行
复制
file = open('RNA_met.txt', 'r')
f = file.readlines()
print(f)

代码中没有错误。不幸的是,我没有看到我的顺序。我试图将整个文件路径更改为:

代码语言:javascript
运行
复制
f = open("C:\\rna\RNA_met.txt", "r")
print(f.read())

但这也没什么用。

在进入第二个子任务之前,我对如何解决第一个子任务有什么想法吗?

谢谢!玛丽亚

EN

回答 2

Stack Overflow用户

发布于 2022-06-20 10:30:40

您可以利用Python字典(哈希表)提出一个高效的解决方案,如下所示:

代码语言:javascript
运行
复制
f = open("RNA_met.txt", "r")
seq = f.read()

#In this case, the content of .txt was "AACGAUUCGACCGCAAGACUGGGCGAACCAUUCUAA"
combinations = {}
for i in ["A", "G", "U"]:
  for j in ["A", "G"]:
    for k in ["U", "A", "C"]:
      combinations[f"{i}{j}AC{k}"] = ""

for i in range(0, len(seq)-5):
    if seq[i:i+5] in combinations:
        print(seq[i:i+5], "Sequence found on: ", i)

输出:

代码语言:javascript
运行
复制
AGACU Sequence found on:  15
GAACC Sequence found on:  24

该算法将所有可能的"DRACH"序列组合存储到哈希表中,并遍历.txt文件以查找潜在的匹配项。找到后,它会用长的字母序列将匹配和其位置打印到文件中。

票数 1
EN

Stack Overflow用户

发布于 2022-06-20 10:41:43

下面是使用regex的完整解决方案(对于使用字符串非常有用)

代码语言:javascript
运行
复制
import re
from typing import Dict, List

D = "[AGU]"
R = "[AG]"
A = "A"
C = "C"
H = "[UAC]"

RE_DRACH_PATTERN = re.compile(f"{D}{R}{A}{C}{H}")


def find_drach_seq(mrna_seq: str) -> List[Dict]:
    ret = []
    for a_match in re.finditer(RE_DRACH_PATTERN, mrna_seq):
        ret.append(
            {"start": a_match.start(), "end": a_match.end(), "drach": a_match.group()}
        )
    return ret


def find_drach_in_file(in_file_path: str) -> List[Dict]:
    ret = []
    current_line = 0
    with open(in_file_path, "r", encoding="UTF-8") as fr:
        for line in fr:
            current_line += 1
            drach_matches = find_drach_seq(line)
            for a_match in drach_matches:
                a_match["line"] = current_line
                ret.append(a_match)
    return ret


if __name__ == "__main__":
    mrna_seq = "AACGAUUCGACCGCAAGACUGGGCGAACCAUUCUAA"
    for a_match in find_drach_seq(mrna_seq):
        print(a_match)
    in_file = "m_rna.txt"
    for a_match in find_drach_in_file(in_file_path=in_file):
        print(a_match)

我的妻子是一名病理医生,在某些时候可能需要了解mRNA (我忘记了专业名称)。如果我们能分享的话那就太好了。

总之,您的第二段代码缺少了一个转义:C:\\rna\\RNA_met.txt

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72685294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档