在UniProt的正则表达式搜索中添加蛋白质代码作为标识符 - python

我用我感兴趣的蛋白质序列从UniProt处获得了关闭的文件,现在我希望从文件中提取/保存跨膜区域的位置。

该文件看起来像这样


O75581  UniProtKB   Topological domain  1394    1613    .   .   .   Note=Cytoplasmic;Ontology_term=ECO:0000255;evidence=ECO:0000255 

O75581  UniProtKB   Repeat  63  106 .   .   .   Note=LDL-receptor class B 1 

P13688  UniProtKB   Transmembrane   429 452 .   .   .   Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255 

P13688  UniProtKB   Topological domain  453 526 .   .   .   Note=Cytoplasmic;Ontology_term=ECO:0000255;evidence=ECO:0000255 

P13688  UniProtKB   Domain  35  142 .   .   .   Note=Ig-like V-type;Ontology_term=ECO:0000250;evidence=ECO:0000250|UniProtKB:P31997 

P19022  UniProtKB   Transmembrane   725 745 .   .   .   Note=Helical;Ontology_term=ECO:0000255;evidence=ECO:0000255 

.....

为了提取跨膜区域的位置和相应的起始结束位置,我使用了以下代码

found = []
match = re.compile('(Transmembrane)'"\t"'(\w*)'"\t"'(\w*)')
with open("997_from uniprot.gff", "r") as f:
    searchlines = f.readlines()
j=len(searchlines)-1 
for i, line in enumerate(searchlines): 
    found.extend(match.findall(line))

col_Names=["location", "Start", "End"]
domain_position = pd.DataFrame(found,columns=col_Names)
domain_position.head()

这给出了预期的结果。

+---+---------------+-------+------+
| | location | Start | End |
+---+---------------+-------+------+
| 0 | Transmembrane | 1371 | 1393 |
| 1 | Transmembrane | 429 | 452 |
| 2 | Transmembrane | 725 | 745 |
| 3 | Transmembrane | 646 | 668 |
| 4 | Transmembrane | 324 | 344 |
+---+---------------+-------+------+

现在,我希望在生成的表格的每一行上添加蛋白质标识符,并且我知道re.compile = '^(.*?)[ ]'给出了该行的第一个单词,但是我不确定如何在不提取不需要的行的情况下将其放入代码中?

参考方案

您可以将正则表达式修改为

match = re.compile('^(\S+).*?(Transmembrane)\t(\w*)\t(\w*)')
                    ^^^^^^^^^ 

^(\S+).*?将匹配并捕获字符串中的第一个非空白块,并尽可能少地匹配除换行符以外的任何0+个字符,直到后续模式的第一次出现为止。

请参见regex demo。

注意:如果需要,请放回引号,问题中显示的输入内容不带引号。

然后,您只需要添加列:

col_Names=["proteinID", "location", "Start", "End"]

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

如何在python中将从PDF提取的文本格式化为json - python

我已经使用pyPDF2提取了一些文本格式的发票PDF。我想将此文本文件转换为仅包含重要关键字和令牌的json文件。输出应该是这样的:#PurchaseOrder {"doctype":"PO", "orderingcompany":"Demo Company", "su…

查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …

Python中的Json操作 - python

Latest_json和Historic_json函数返回:return(frame.to_json(orient='records')) 主功能:recentdata = recent_json(station) historicdata = historic_json(station) alldata = historicdata +…