我已经从 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()
这给出了期望的结果。
+---+----------------+--------+-----+
| |地点 |开始|结束 |
+---+----------------+--------+------+
| 0 |跨膜 | 1371 | 1371 1393 | 1393
| 1 |跨膜 | 429 | 429 452 | 452
| 2 |跨膜| 725 | 725 745 | 745
| 3 |跨膜| 646 | 646 668 | 668
| 4 |跨膜 | 324 | 324 344 | 344
+---+----------------+--------+------+
现在我希望在生成的表的每一行上添加蛋白质标识符,并且我知道 re.compile = '^(.*?)[ ]'
给出了该行的第一个单词,但我不确定如何将其放入我的代码中而不提取不需要的行?
最佳答案
您可以将正则表达式修改为
match = re.compile('^(\S+).*?(Transmembrane)\t(\w*)\t(\w*)')
^^^^^^^^^
^(\S+).*?
将匹配并捕获字符串中的第一个非空白 block ,并尽可能少地匹配除换行符之外的任何 0+ 个字符,最多后续模式第一次出现的位置。
请参阅regex demo .
注意:如果需要,请放回引号,问题中显示的您的输入没有引号。
然后,您只需添加该列:
col_Names=["proteinID", "location", "Start", "End"]
关于python - 在 UniProt 的正则表达式搜索中添加蛋白质代码作为标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59886001/