Как извлечь строки / текст, присутствующий между несколькими экземплярами одного и того же специального символа в файле - PullRequest
0 голосов
/ 14 апреля 2020

Входной файл: seq.gb

//

LOCUS NC_12345 299 п.н. сс-РНК, линейный VRL 1-11-1

ОПРЕДЕЛЕНИЕ xyz

ДОСТУП *

ОСОБЕННОСТИ Местоположение / Квалификаторы

источник 1..29903

/ организм = "ABC2"

/ mol_type = "genomi c RNA"

/ isolate = "xyz"

/ host = "jgdg"

/ db_xref = "taxon: 123456 "

/ country =" wf "

/ collection_date =" De c -2011 "

5'UTR 1..265

ген 266..21555

/ gene = "jgn"

CDS join (266..13468,13468..21555)

//

LOCUS NC_23232 29903 п.н. с.с.-РНК линейный VRL 18-MAR-2020

ОПРЕДЕЛЕНИЕ xyz

ДОСТУП *

ОСОБЕННОСТИ Местоположение / Квалификаторы

источник 1..29903

/ организм = "ABC2"

/ mol_type = "геноми c РНК"

/ изолят = "xyz"

/ host = "jgdg"

/ db_xref = "taxon: 123456"

/ country = "wf"

/ collection_date = "De c -2011"

5'UTR 1..265

ген 266..21555

/ gene = "jgn"

CDS join (266..13468,13468..21555)

//

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

выходной файл1: NC_12345.gb

LOCUS NC_12345 299 п.о. сс-РНК линейный VRL 1-11-1

ОПРЕДЕЛЕНИЕ xyz

ДОСТУП

ОСОБЕННОСТИ Местоположение / Отборочные

источник 1..299

/ animal = "ABC2"

/ mol_type = "genomi c РНК"

/ isolate = "xyz"

/ host = "jgdg"

/ db_xref = "таксон: 123456"

/ country = "wf"

/ collection_date = "De c -2011"

5'UTR 1..265

ген 266..2155

/ gene = "jgn"

CDS join (266..1346,1346..2155)

выходной файл2: NC_23232.gb

LOCUS NC_23232 299 п.н. сс-РНК, линейная VRL 2-2-2

ОПРЕДЕЛЕНИЕ xyz

ДОСТУП *

ОСОБЕННОСТИ Местоположение / Квалификаторы

источник 1..299

/ организм = "ABC2"

/ mol_type = "genomi c RNA"

/ isolate = "xyz"

/ host = "jgdg"

/ db_xref = "таксон: 123456"

/ country = "wf"

/ collection_date = "De c -2011"

5'UTR 1..265

ген 266..2155

/ gene = "jgn"

соединение CDS (266..1346,1346..2155)

У меня есть 1200 таких записей в одном файле, и я хочу разделить их на 1200 отдельных файлов. Как это сделать?

1 Ответ

0 голосов
/ 14 апреля 2020

Попробуйте:

import re
# open your source file here and read it to a string variable
with open ('source.txt', mode='r') as src:
    src_read = src.read()

src_list = src_read.split('//')

regex = re.compile('LOCUS ([A-Z]+_[0-9]+\s)')
for content in src_list:
    if (filename := re.search(regex, content)):
        with open(f'{filename.group(1)}.gb', mode='w') as fh:
            fh.write(content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...