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

2024-06-18 13:06:15 发布

您现在位置: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 = '^(.*?)[ ]'给出了行的第一个字,但我不知道如何在不提取不需要的行的情况下将其放入代码中


Tags: 文件domain蛋白质noteontologytermfoundevidence
2条回答

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

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

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

regex demo

注意:如果需要,请放回引号,问题中显示的输入没有引号

然后,您只需添加列:

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

我建议您使用^{}将此文件直接解析为数据帧:

domain = pd.read_csv('997_from uniprot.gff', sep='\t')

现在,您可以按任何方式操作数据帧,例如,获取所需的特定列

相关问题 更多 >