我已经用我感兴趣的蛋白质序列保护了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 = '^(.*?)[ ]'
给出了行的第一个字,但我不知道如何在不提取不需要的行的情况下将其放入代码中
您可以将正则表达式修改为
^(\S+).*?
将匹配并捕获字符串中的第一个非空白块,并尽可能少地匹配除换行符以外的任何0+字符,直到第一次出现后续模式见regex demo
注意:如果需要,请放回引号,问题中显示的输入没有引号
然后,您只需添加列:
我建议您使用^{} 将此文件直接解析为数据帧:
现在,您可以按任何方式操作数据帧,例如,获取所需的特定列
相关问题 更多 >
编程相关推荐