Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配无法使用Pyteomics解析器处理简单字符串_Python_Regex_String_Dataframe_Match - Fatal编程技术网

Python 正则表达式匹配无法使用Pyteomics解析器处理简单字符串

Python 正则表达式匹配无法使用Pyteomics解析器处理简单字符串,python,regex,string,dataframe,match,Python,Regex,String,Dataframe,Match,我正在对人类蛋白质组进行电子消化,这意味着我试图在某个位置切割每个蛋白质的氨基酸序列。我在我创建的一个更大的函数中使用Pyteomics解析器函数 我得到这个错误: Pyteomics错误:Pyteomics错误,消息:“不是有效的modX序列:{'sequence':'AKDEVQKN'}” 但是,我不确定AKDEVQKN与modX_Requence编译器的不匹配程度: _modX_sequence = re.compile(r'^([^-]+-)?((?:[^A-Z-]*[A-Z])+)(-

我正在对人类蛋白质组进行电子消化,这意味着我试图在某个位置切割每个蛋白质的氨基酸序列。我在我创建的一个更大的函数中使用Pyteomics解析器函数

我得到这个错误: Pyteomics错误:Pyteomics错误,消息:“不是有效的modX序列:{'sequence':'AKDEVQKN'}”

但是,我不确定AKDEVQKN与modX_Requence编译器的不匹配程度:

_modX_sequence = re.compile(r'^([^-]+-)?((?:[^A-Z-]*[A-Z])+)(-[^-]+)?$')
根据我对这个正则表达式的理解,它应该找到任何不以(-)开头并后跟一系列字母字符的字符串

这是我正在尝试使用的函数

import re
import pyteomics
from pyteomics import fasta, parser
def ButcherShop(df, target, rule,min_length=7,exception=None,max_legnth=100, pH=2.0):
>     raw = df[target]
>     unique_peptides = set()
>     for peptide in raw:
>         new_peptides = parser.cleave(peptide, rule=rule,min_length=min_length,exception=exception)
>         unique_peptides.update(new_peptides)
>     print(f'Done,{len(unique_peptides)} sequences of >= 7 amino acids!')
>     pep_dic = [{'sequence': i} for i in unique_peptides]
>     for peptides in pep_dic:
>         pep_dic['parsed_sequence'] = parser.parse(peptides,show_unmodified_termini=False)
>         pep_dic['xlength'] = len(peptides)
>         pep_dic['charge'] = int(round(electrochem.charge(peptides, pH=pH)))
>         pep_dic['mass']=int(round(Peptide_mass(peptides)))
>     pep_dic = [peptide for peptide in pep_dic if peptide['length'] <= int(max_length)]
>     pep_df = pd.DataFrame.from_dict(pep_dic)
>     return unique_peptides,pep_dic,pep_df
重新导入
导入pyteomics
从pyteomics导入fasta,解析器
def ButcherShop(df,目标,规则,最小长度=7,异常=None,最大长度=100,pH=2.0):
>原始=测向[目标]
>唯一_肽=集合()
>对于原料中的肽:
>新肽=解析器.解理(肽,规则=规则,最小长度=最小长度,异常=异常)
>独特的_肽。更新(新_肽)
>print(f'Done,{len(独特肽)}序列>=7个氨基酸!')
>pep_dic=[{'sequence':i}表示唯一_肽中的i]
>对于pep_dic中的肽:
>pep_dic['parsed_sequence']=parser.parse(肽,显示未修改的_termini=False)
>pep_dic['xlength']=len(肽)
>pep_dic['charge']=int(圆形(电化学电荷(肽,pH=pH)))
>pep_dic['mass']=int(圆形(肽_质量(肽)))
>pep_dic=[如果肽['length']pep_df=pd,则pep_dic中的肽对应肽=来自dic的pd.数据帧(pep_dic)
>返回唯一肽,pep_dic,pep_df
感谢您提供有关如何解决此问题的任何见解

**更新:如果我在不同的集合上运行,我会得到相同的错误,这可能表明是库本身

错误屏幕截图:
不是解决方案,而是一些分析

在下面的简单示例代码中,“AKDEVQKN”使用post中的正则表达式进行匹配

import re

line = 'AKDEVQKN'

pat = re.compile(r'^([^-]+-)?((?:[^A-Z-]*[A-Z])+)(-[^-]+)?$')

x = re.match(pat, line)

if x:
    print(x)
    print(x.group())
    print(x.groups())
产出:

<re.Match object; span=(0, 8), match='AKDEVQKN'>
AKDEVQKN
(None, 'AKDEVQKN', None)


在我运行解析器之前,尝试使用它们的有效函数测试所有肽。我在字符串中找不到任何false。我现在正在查看它们的函数或我自己的函数

> for peptide in menu["Peptide"]:
>     x=parser.valid(peptide)
>     if x == False:
>         print(peptide)
>         break
>     else:
>         print(x)

这里是Pyteomics维护人员

错误消息实际上告诉您问题的来源:
pyteomicsrerror:Pyteomics错误,消息:“不是有效的modX序列:{'sequence':'AKDEVQKN'}”

这意味着您传递的不是字符串
'AKDEVQKN'
,而是字典
{'sequence':'AKDEVQKN'}

pep_dic = [{'sequence': i} for i in unique_peptides]
for peptides in pep_dic:
    pep_dic['parsed_sequence'] = parser.parse(peptides,show_unmodified_termini=False)
    ...
您应该将序列本身传递给
parse
,而不是dict:

pep_dic['parsed_sequence'] = parser.parse(peptides['sequence'], show_unmodified_termini=False)

.
([^-]+-)?
——这是一个非破折号序列,后跟破折号,但最后一个?表示“整个序列是可选的。”谢谢。我希望它能匹配,我只是不确定它为什么会抛出这个错误。我刚刚更新了这个问题。我用不同的酶尝试了它,基本上我用20000个字符串生成了>500000个字符串,最终形成一个集合。我开始怀疑库代码中有错误。我将继续他们的示例le,看看我最后得到了什么。它似乎在随机字符串上抛出了错误。现在我看到了你的帖子,我开始认为这是他们的代码。``312 try:-->313 n,body,c=re.match(_modX_sequence,sequence).groups()314除了AttributeError:“`谢谢你,我在另一篇帖子上找到了答案。不过谢谢你的澄清!
pep_dic = [{'sequence': i} for i in unique_peptides]
for peptides in pep_dic:
    pep_dic['parsed_sequence'] = parser.parse(peptides,show_unmodified_termini=False)
    ...
pep_dic['parsed_sequence'] = parser.parse(peptides['sequence'], show_unmodified_termini=False)