我使用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中打印了以下代码:
file = open('RNA_met.txt', 'r')
f = file.readlines()
print(f)
代码中没有错误。不幸的是,我没有看到我的顺序。我试图将整个文件路径更改为:
f = open("C:\\rna\RNA_met.txt", "r")
print(f.read())
但这也没什么用。
在进入第二个子任务之前,我对如何解决第一个子任务有什么想法吗?
谢谢!玛丽亚
发布于 2022-06-20 10:30:40
您可以利用Python字典(哈希表)提出一个高效的解决方案,如下所示:
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)
输出:
AGACU Sequence found on: 15
GAACC Sequence found on: 24
该算法将所有可能的"DRACH"
序列组合存储到哈希表中,并遍历.txt
文件以查找潜在的匹配项。找到后,它会用长的字母序列将匹配和其位置打印到文件中。
发布于 2022-06-20 10:41:43
下面是使用regex的完整解决方案(对于使用字符串非常有用)
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
https://stackoverflow.com/questions/72685294
复制相似问题