class FASTA(object):
def __init__(self,data):
self.data = data.strip().splitlines()
self.desc = self.data[0]
self.sequence = "".join(self.data[1:]).replace(" ","")#get rid of spaces
def GetCodons(self):
return [self.sequence[i:i+3] for i in range(0,len(self.sequence),3)]
def __str__(self):
return "DESC:'%s'\nSEQ:'%s'"%(self.desc,self.sequence)
with open("data.fasta") as f:
data = f.read()
parts = data.split(">")
for p in parts[1:]:
f= FASTA(p)
print f
print f.GetCodons()
我看到两个错误:
你的正则表达式可能是错的。您的FASTA输入不太可能实际包含一个空回车符(
\r
),因此您的regex不会匹配任何内容。因此if match:
测试总是错误的,所以什么都不会发生。在此外,在处理每个匹配项时:将
gene
的第一个字符(空白)添加为键,将第二个字符添加为值。在你可能想分别使用第2组和第4组:
\r
不是一个有效的字符类,我想你是想用\s
代替。如果你不使用它们,你可以减少它们。在但最重要的是,您需要正确提取组:
通过只创建两个捕获组,我们可以更简单地用}。在
.groups()
提取这两个,并直接将它们分配给两个变量,tag
和{然而,阅读FASTA format似乎表明这是一种多行格式,标签在一行,基因数据在多行之后。在这种情况下,您的
\r
是为了匹配换行符。当你一次读一行文件时,这行不通。在如果不使用以下正则表达式,则读取该格式会简单得多:
^{pr2}$这将逐行读取文件,根据起始的
>
字符检测标记,然后读取多行基因信息,将其收集到字典中最近读取的标记下。在注意
rU
模式;我们使用python的universal newlines mode打开文件,以处理创建文件时使用的任何换行约定。在最后但并非最不重要的是,看看BioPy project;它们的^{} module 可以完美地处理FASTA和其他许多格式。在
不要为此使用正则表达式。。。在
相关问题 更多 >
编程相关推荐