在 UniProt 的正则表达式搜索中添加蛋白质代码作为标识符
add protein code as identifier in regular expression search from UniProt
我已经使用我感兴趣的蛋白质序列从 UniProt 获取关闭文件,现在我希望 extract/save 从文件中获取跨膜区域的位置。
文件看起来像这样
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 |
+---+---------------+-------+------+
现在我希望在生成的 table 的每一行上添加蛋白质标识符,我知道 re.compile = '^(.*?)[ ]'
给出了该行的第一个字,但我不确定如何将其放入我的代码没有提取不需要的行?
您可以将正则表达式修改为
match = re.compile('^(\S+).*?(Transmembrane)\t(\w*)\t(\w*)')
^^^^^^^^^
^(\S+).*?
将匹配并捕获字符串中的第一个非空白块,并尽可能少地匹配除换行符以外的任何 0+ 个字符,直到后续模式第一次出现为止。
参见regex demo。
注意:如果需要请放回引号,问题中显示的输入没有引号。
然后,您只需要添加列:
col_Names=["proteinID", "location", "Start", "End"]
我建议您使用read_csv
将此文件直接解析为数据框:
domain = pd.read_csv('997_from uniprot.gff', sep='\t')
现在您可以随心所欲地操作数据框,例如获取您想要的特定列。
我已经使用我感兴趣的蛋白质序列从 UniProt 获取关闭文件,现在我希望 extract/save 从文件中获取跨膜区域的位置。
文件看起来像这样
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 |
+---+---------------+-------+------+
现在我希望在生成的 table 的每一行上添加蛋白质标识符,我知道 re.compile = '^(.*?)[ ]'
给出了该行的第一个字,但我不确定如何将其放入我的代码没有提取不需要的行?
您可以将正则表达式修改为
match = re.compile('^(\S+).*?(Transmembrane)\t(\w*)\t(\w*)')
^^^^^^^^^
^(\S+).*?
将匹配并捕获字符串中的第一个非空白块,并尽可能少地匹配除换行符以外的任何 0+ 个字符,直到后续模式第一次出现为止。
参见regex demo。
注意:如果需要请放回引号,问题中显示的输入没有引号。
然后,您只需要添加列:
col_Names=["proteinID", "location", "Start", "End"]
我建议您使用read_csv
将此文件直接解析为数据框:
domain = pd.read_csv('997_from uniprot.gff', sep='\t')
现在您可以随心所欲地操作数据框,例如获取您想要的特定列。