在 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')

现在您可以随心所欲地操作数据框,例如获取您想要的特定列。