добавить код белка в качестве идентификатора при поиске по регулярному выражению из UniProt - PullRequest
3 голосов
/ 23 января 2020

Я защитил отключенный файл от UniProt с интересующими меня белковыми последовательностями, и теперь я sh извлекаю / сохраняю местоположение трансмембранной области из файла.

файл выглядит так


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 | +---+---------------+-------+------+

Теперь я добавлю sh, чтобы добавить идентификаторы белка в каждую строку сгенерированной таблицы, и я знаю, re.compile = '^(.*?)[ ]' дает первое слово в строке, но я не уверен, как вставить это в мой код без извлечение ненужных строк?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Я предлагаю вам использовать read_csv для синтаксического анализа этого файла непосредственно во фрейме данных:

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

Теперь вы можете манипулировать фреймом данных любым способом, которым вы sh, например, чтобы получить нужные вам c столбцы.

1 голос
/ 24 января 2020

Вы можете изменить регулярное выражение, как

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

^(\S+).*? будет сопоставлять и захватывать первый непробельный фрагмент в строке и совпадать с любыми 0+ символами, кроме символов разрыва строки, как можно меньше раз , вплоть до первого появления последующих шаблонов.

См. демонстрационный пример regex .

ПРИМЕЧАНИЕ : при необходимости верните кавычки, ввод, как показано в вопросе, не имеет кавычек.

Затем вам просто нужно добавить столбец:

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