我如何编辑我的 python 脚本以便它可以 select 一个 fasta 序列的整个文本?
How can i edit my python script so it can select the whole text of a fasta sequence?
我有2个文件:一个是包含一系列ID的文本文件,另一个是包含与第一个文件中的ID对应的fasta序列的multifasta文件。我有一个 python 脚本,可以 select 来自两个文件的匹配 ID。它看起来像这样:
from Bio import SeqIO
fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict={}
for record in fasta:
seq_dict[record.id]=record.seq
#print (seq_dict)
for line in open("names","r"):
line=line.strip()
print(line)
for cle in seq_dict.keys():
print(cle)
我需要编辑我的脚本,以便它可以 select 相应 ID 旁边的序列文本。你能帮我做吗?谢谢。
如果您只想从 names
文件中提取项目,首先将名称读入内存可能更有效。
from Bio import SeqIO
wanted = dict()
with open("names","r") as lines:
for line in lines:
wanted[line.strip()] = 1
for record in SeqIO.parse("fasta1.fasta","fasta"):
if record.id in wanted:
print(record.seq)
看看这是否有效:
from Bio import SeqIO
fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict = {}
for record in fasta:
seq_dict[record.id.strip()] = record.seq
with open("names","r") as lines:
for line in lines:
l = line.strip().lstrip('<')
if l in seq_dict:
print(l) # ID
print(seq_dict[l]) # sequence
注意这里假设从fasta文件中获取的ID与name文件中的ID相同。如果不是这种情况,请进一步详细说明这两个文件分别包含的内容(带示例)
在玩了 Bio.SeqIO 之后,我得出结论,@Bazingaa 可能是正确的。像这样调整您的代码:
from Bio import SeqIO
fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict={}
for record in fasta:
seq_dict[record.id]=record.description
#print (seq_dict)
for line in open("names","r"):
line=line.strip()
print(line)
for cle, desc in seq_dict.items():
print(cle)
print(desc)
您似乎是 python 的新手,所以我是这样做的:
- 我没有保留 record.seq,而是存储了 record.description
for a, b in <some dictionary>.items()
将遍历字典项返回键值对到 a, b 变量
希望对您有所帮助。
编辑:
这里有一个 "pythonic" 版本。我真的不明白 fasta 是什么,所以我假设你想从名字中读取行,将 'tr|something|something' 部分作为 ids(没有前导 '>')并打印出 [=31= 中的那些] 如果他们在名字中:
from Bio import SeqIO
fasta = SeqIO.parse("fasta1.fasta","fasta")
# read all the names
with open("names", "r") as f: # this takes care to close the file afterwards
names = [line.strip().lstrip('>') for line in f]
print("Names: ", names)
for record in fasta:
print("Record:", record.id)
if record.id in names:
print("Matching record:", record.id, record.seq, record.description)
我有2个文件:一个是包含一系列ID的文本文件,另一个是包含与第一个文件中的ID对应的fasta序列的multifasta文件。我有一个 python 脚本,可以 select 来自两个文件的匹配 ID。它看起来像这样:
from Bio import SeqIO
fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict={}
for record in fasta:
seq_dict[record.id]=record.seq
#print (seq_dict)
for line in open("names","r"):
line=line.strip()
print(line)
for cle in seq_dict.keys():
print(cle)
我需要编辑我的脚本,以便它可以 select 相应 ID 旁边的序列文本。你能帮我做吗?谢谢。
如果您只想从 names
文件中提取项目,首先将名称读入内存可能更有效。
from Bio import SeqIO
wanted = dict()
with open("names","r") as lines:
for line in lines:
wanted[line.strip()] = 1
for record in SeqIO.parse("fasta1.fasta","fasta"):
if record.id in wanted:
print(record.seq)
看看这是否有效:
from Bio import SeqIO
fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict = {}
for record in fasta:
seq_dict[record.id.strip()] = record.seq
with open("names","r") as lines:
for line in lines:
l = line.strip().lstrip('<')
if l in seq_dict:
print(l) # ID
print(seq_dict[l]) # sequence
注意这里假设从fasta文件中获取的ID与name文件中的ID相同。如果不是这种情况,请进一步详细说明这两个文件分别包含的内容(带示例)
在玩了 Bio.SeqIO 之后,我得出结论,@Bazingaa 可能是正确的。像这样调整您的代码:
from Bio import SeqIO
fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict={}
for record in fasta:
seq_dict[record.id]=record.description
#print (seq_dict)
for line in open("names","r"):
line=line.strip()
print(line)
for cle, desc in seq_dict.items():
print(cle)
print(desc)
您似乎是 python 的新手,所以我是这样做的:
- 我没有保留 record.seq,而是存储了 record.description
for a, b in <some dictionary>.items()
将遍历字典项返回键值对到 a, b 变量
希望对您有所帮助。
编辑:
这里有一个 "pythonic" 版本。我真的不明白 fasta 是什么,所以我假设你想从名字中读取行,将 'tr|something|something' 部分作为 ids(没有前导 '>')并打印出 [=31= 中的那些] 如果他们在名字中:
from Bio import SeqIO
fasta = SeqIO.parse("fasta1.fasta","fasta")
# read all the names
with open("names", "r") as f: # this takes care to close the file afterwards
names = [line.strip().lstrip('>') for line in f]
print("Names: ", names)
for record in fasta:
print("Record:", record.id)
if record.id in names:
print("Matching record:", record.id, record.seq, record.description)