如何使用python正则表达式分离每个blast结果并将其存储在列表中以供进一步分析

如何使用python正则表达式分离每个blast结果并将其存储在列表中以供进一步分析,python,regex,bioinformatics,biopython,Python,Regex,Bioinformatics,Biopython,我正在研究一组生物序列,其中包括使用ncbi blast。我需要一些关于使用python正则表达式处理输出文件的帮助。包含多个输出序列分析结果的文本结果如下所示 查询=lcl | TRINITY_DN2888_c0_g2_i1 长度=1394 得分E序列产生显著对齐: 比特值 sp | Q9S775 | PKL|U ARATH CHD3型染色质重塑因子PICKLE。。。1640.0 sp | Q9S775 | PKL | ARATH CHD3型染色质重塑因子PICKLE OS=拟南芥OX=370

我正在研究一组生物序列,其中包括使用ncbi blast。我需要一些关于使用python正则表达式处理输出文件的帮助。包含多个输出序列分析结果的文本结果如下所示

查询=lcl | TRINITY_DN2888_c0_g2_i1

长度=1394 得分E序列产生显著对齐: 比特值

sp | Q9S775 | PKL|U ARATH

CHD3型染色质重塑因子PICKLE。。。1640.0

sp | Q9S775 | PKL | ARATH CHD3型染色质重塑因子PICKLE OS=拟南芥OX=3702 GN=PKL PE=1 SV=1长度=1384

分数=1640位4248,期望值=0.0,方法:合成矩阵 调整身份=830/1348 62%,积极=1036/1348 77%, 差距=53/1348 4%

问题1 MSSLVERRVRSERRPLYTDSDSDDLYARGSESKQERPERIVRDDAKNDTCKTCG 60 MSSLVERLR+RS+R+P+Y DDD+++Q E IVR DAK+C+CG Sbjct 1 MSSLVERRIRSDRKPVYNLDSDDFVPKKDRTFEQ——VEAIVRDAKENACQACG 56

λK H aα 0.317 0.134 0.389 0.792 4.96

间隙λkhaα-西格玛 0.267 0.0410 0.140 1.90 42.6 43.6

使用的有效搜索空间:160862965056

查询=lcl | TRINITY_DN2855_c0_g1_i1

长度=145。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ...................................................

我想从Query=lcl | TRINITY_DN2888_c0_g2_i1开始提取信息,然后提取到下一个Query=lcl | TRINITY_DN2855_c0_g1_i1,并将其存储在python列表中以供进一步分析,因为整个文件包含数千个查询结果。是否有python正则表达式代码可以执行此操作

这是我的密码:

#!/user/bin/python3
file=open("path/file_name","r+")
import re
inter=file.read()
lst=[]
lst=re.findall(r'>(.*)>',inter,re.DOTALL)
print(lst)
for x in lst:
    print(x)
我得到了错误的输出,因为代码打印了数千个文件中的全部信息,而不是一次只提取一个结果


谢谢

要获得所需的结果,请使用re.split通过re.findall方法调用以下命令编辑该行:

有关重新拆分的更多信息,请参见此:

也可以考虑在Pythython中使用现在不推荐的BASE解析器:

纯文本BLAST解析器位于Bio.BLAST.NCBIStandalone中

与XML解析器一样,我们需要一个可以处理的句柄对象 传递给解析器。句柄必须实现readline方法 正确地做这件事。获得这种控制的常见方法是 使用提供的blastall或blastpgp函数运行 本地blast,或通过命令行运行本地blast,然后执行以下操作 如下所示:

结果\u句柄=openmy\u文件\u的\u blast\u output.txt

现在我们有了一个句柄,我们称之为result\u句柄,我们 我们已经准备好解析它了。这可以通过以下代码完成:

这将把BLAST报告解析为BLAST记录类 Blast或PSIBAST记录,这取决于您正在解析的内容,以便 你可以从中提取信息。在我们的情况下,让我们只打印 快速总结所有路线,大于某些路线 阈值

如果您还阅读了关于解析blastxml输出的第7.3节,您将 请注意,上面的代码与该代码中的代码相同 部分一旦您将某些内容解析为记录类,您就可以处理 它独立于原始爆炸信息的格式 解析。很时髦


要获得所需的结果,请使用re.split通过re.findall方法调用以下命令编辑该行:

有关重新拆分的更多信息,请参见此:

也可以考虑在Pythython中使用现在不推荐的BASE解析器:

纯文本BLAST解析器位于Bio.BLAST.NCBIStandalone中

与XML解析器一样,我们需要一个可以处理的句柄对象 传递给解析器。句柄必须实现readline方法 正确地做这件事。获得这种控制的常见方法是 使用提供的blastall或blastpgp函数运行 本地blast,或通过命令行运行本地blast,然后执行以下操作 如下所示:

结果\u句柄=openmy\u文件\u的\u blast\u output.txt

现在我们有了一个句柄,我们称之为result\u句柄,我们 我们已经准备好解析它了。这可以通过以下代码完成:

这将把BLAST报告解析为BLAST记录类 Blast或PSIBAST记录,这取决于您正在解析的内容,以便 你可以从中提取信息。在我们的情况下,让我们只打印 快速总结一下所有的问题 比某些更大的耻辱 阈值

如果您还阅读了关于解析blastxml输出的第7.3节,您将 请注意,上面的代码与该代码中的代码相同 部分一旦您将某些内容解析为记录类,您就可以处理 它独立于原始爆炸信息的格式 解析。很时髦


我终于找到了将大文件分解成小块的解决方案,这样我就可以使用python正则表达式处理单个查询结果。。。这是我的密码

#!/user/bin/python3
file=open("/path/file_name.txt","r+")
import re
inter=file.read()
lst=re.findall('(?<=Query= lcl)(.*?)(?=Effective search space)', inter, flags=re.S)
print(lst)

谢谢你们所有人帮助我

我终于找到了一个解决方案,可以将大文件分成小块,这样我就可以使用python正则表达式处理单个查询结果。。。这是我的密码

#!/user/bin/python3
file=open("/path/file_name.txt","r+")
import re
inter=file.read()
lst=re.findall('(?<=Query= lcl)(.*?)(?=Effective search space)', inter, flags=re.S)
print(lst)

谢谢你们所有人帮助我

嘿@Jithin,你可以用一种更简单的方式。中断行是否总是以Query=lcl |…?另外,是否希望每个块在列表中作为一个大字符串?或者您想要更大的粒度?如果您不介意预处理数据,该命令在这里可能会很有用。您是否考虑过使用现有的包装器进行NCBI BLAST查询API,例如在生物信息学中,您几乎不需要使用自己的解析器。分界线总是以Query=lcl开始,是的,我希望每个查询输出的每个数据块都包含在列表中。例如:lst=[查询1+数据,查询2+数据,…]作为字符串。@多兰先生,谢谢。嘿@Jithin,你可以用一种更简单的方式来做。中断行是否总是以Query=lcl |…?另外,是否希望每个块在列表中作为一个大字符串?或者您想要更大的粒度?如果您不介意预处理数据,该命令在这里可能会很有用。您是否考虑过使用现有的包装器进行NCBI BLAST查询API,例如在生物信息学中,您几乎不需要使用自己的解析器。分界线总是以Query=lcl开始,是的,我希望每个查询输出的每个数据块都包含在列表中。例如:lst=[查询1+数据,查询2+数据,…]作为字符串。@多兰先生,谢谢。我以前与Bio.Blast导入公司的Bistandalone biopython Blast解析器合作过。我现在正在使用的输出是从一个工具获得的,我用这个工具获得了3'UTR区域的序列。我希望使用python正则表达式处理每个输出的原因是为了获得对结果的更多了解并进行更好的分析。谢谢@VinceI先生以前与Bio.Blast导入NCBIStandalone biopython Blast解析器合作过。我现在正在使用的输出是从一个工具获得的,我用这个工具获得了3'UTR区域的序列。我希望使用python正则表达式处理每个输出的原因是为了获得对结果的更多了解并进行更好的分析。谢谢@Vinces先生,使用前瞻是最佳解决方案。我就是想不出正确的正则表达式,所以使用了re.split。干得好!是的,使用前瞻是最佳解决方案。我就是想不出正确的正则表达式,所以使用了re.split。干得好!
>>> E_VALUE_THRESH = 0.04
>>> for alignment in blast_record.alignments: 
...     for hsp in alignment.hsps: 
...         if hsp.expect < E_VALUE_THRESH: 
...             print('****Alignment****') 
...             print('sequence:', alignment.title) 
...             print('length:', alignment.length)
...             print('e value:', hsp.expect) 
...             print(hsp.query[0:75] + '...') 
...             print(hsp.match[0:75] + '...') 
...             print(hsp.sbjct[0:75] + '...')
#!/user/bin/python3
file=open("/path/file_name.txt","r+")
import re
inter=file.read()
lst=re.findall('(?<=Query= lcl)(.*?)(?=Effective search space)', inter, flags=re.S)
print(lst)