首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex匹配不工作于简单字符串与Pyteomics解析器

regex匹配不工作于简单字符串与Pyteomics解析器
EN

Stack Overflow用户
提问于 2021-03-04 21:26:53
回答 3查看 87关注 0票数 2

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

我得到了这个错误:PyteomicsError: Pyteomics错误,消息:"Not序列:{'sequence':'AKDEVQKN'}"

但是,我不确定AKDEVQKN如何与modX_reqquence compilier不匹配:

代码语言:javascript
复制
_modX_sequence = re.compile(r'^([^-]+-)?((?:[^A-Z-]*[A-Z])+)(-[^-]+)?$')

根据我对这个正则表达式的理解,它应该找到不以(-)开头的字符串,并且后面是一系列字母字符。

这是我试着使用的函数。

代码语言:javascript
复制
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

感谢您对如何解决这一问题的任何见解。

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

错误截图:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-07 22:45:46

梨组学保持器在这里。

错误消息实际上告诉您问题的根源:PyteomicsError: Pyteomics error, message: "Not a valid modX sequence: {'sequence': 'AKDEVQKN'}"

这意味着,您传递的不是字符串'AKDEVQKN',而是一个字典{'sequence': 'AKDEVQKN'}。这实际上发生在这里:

代码语言:javascript
复制
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:

代码语言:javascript
复制
pep_dic['parsed_sequence'] = parser.parse(peptides['sequence'], show_unmodified_termini=False)
票数 3
EN

Stack Overflow用户

发布于 2021-03-05 17:18:05

不是解决办法,而是分析..。

在下面的简单示例代码中,'AKDEVQKN‘使用post中的regex进行匹配。

代码语言:javascript
复制
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())

产出:

代码语言:javascript
复制
<re.Match object; span=(0, 8), match='AKDEVQKN'>
AKDEVQKN
(None, 'AKDEVQKN', None)

这表明问题在代码中的其他地方。

  • “AKDEVQKN”是完整的行还是有更多的行?
  • 是否有可能在使用序列'AKDEVQKN‘调用_modX_sequence时更改了re.match?要检查,请暂时更改 ~\Anaconda\envs\SciFly\lib\site-packages\pyteomics\parser.py 第312行:
代码语言:javascript
复制
try:
  n, body, c = re.match(_modX_sequence, sequence).groups()
except AttributeError: 

代码语言:javascript
复制
try:
  if sequence == 'AKDEVQKN':
    print("DEBUG: ", sequence, _modX_sequence)
    # or drop into a debugger, pdb or iPython's 
    # import pdb; pdb.set_trace()
    # dir() 
  n, body, c = re.match(_modX_sequence, sequence).groups()
except AttributeError:
票数 0
EN

Stack Overflow用户

发布于 2021-03-05 17:45:32

在我运行解析器之前,尝试使用它们的有效函数来测试所有的肽。我在绳子上找不到假的。我现在看的是他们的功能或我自己的。

代码语言:javascript
复制
> for peptide in menu["Peptide"]:
>     x=parser.valid(peptide)
>     if x == False:
>         print(peptide)
>         break
>     else:
>         print(x)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66483290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档