Составьте список из списков последовательностей ДНК - PullRequest
0 голосов
/ 08 марта 2020

Это пример моего шаблона (sequence.fasta: обратите внимание, что каждая строка заканчивается \ n, последняя строка обычно заканчивается \ n \ n)

>sequence1
TTGACCGATGACCCC
GGTTC
>sequence2
TTGACCGATGACCCC
GGTTCAGGCTTCACC
ACAG
>sequence3
TTGACCGATGACCCC
GGTTCAGGCTTCAC

список, который мне нужен

[
   ['>sequence1','TTGACCGATGACCCCGGTTC'],
   ['>sequence2','TTGACCGATGACCCCGGTTCAGGCTTCACCACAG'],
   ['>sequence3','TTGACCGATGACCCCGGTTCAGGCTTCAC']
]

это то, что я пытался

with open(r"C:\Users\Lab\Desktop\sequence.fasta") as f:
    handle = f.read()
    # print(handle)
    pattern = re.compile(r'(>.+\n)(([A-Z]+\n*)+)')
    matches = pattern.finditer(handle)

    for match in matches:
        output = ['{}'.format(match.group(1)),'{}'.format(match.group(2)).replace("\n","")]
        print(output)

, но я получил (это 3 списка в одном выводе)

   ['>sequence1','TTGACCGATGACCCCGGTTC']
   ['>sequence2','TTGACCGATGACCCCGGTTCAGGCTTCACCACAG']
   ['>sequence3','TTGACCGATGACCCCGGTTCAGGCTTCAC']

Я уже пытался создайте пустой список и используйте list.append() или list.extend() и l oop, чтобы составить список из этих списков, но я не могу понять, как (я микробиолог). Это для дальнейшего анализа ДНК.

Благодарим Вас за помощь, заранее СПАСИБО

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Попробуйте это:

output = []
with open(r"C:\Users\Lab\Desktop\sequence.fasta") as f:
    handle = f.read()
    # print(handle)
    pattern = re.compile(r'(>.+\n)(([A-Z]+\n*)+)')
    matches = pattern.finditer(handle)

    for match in matches:
        output.append(['{}'.format(match.group(1)),'{}'.format(match.group(2)).replace("\n","")])
print(output)
1 голос
/ 08 марта 2020

Вы можете сделать это с помощью split и понимания списка:

handle=""">sequence1
TTGACCGATGACCCC
GGTTC
>sequence2
TTGACCGATGACCCC
GGTTCAGGCTTCACC
ACAG
>sequence3
TTGACCGATGACCCC
GGTTCAGGCTTCAC"""

sequences = [[n,"".join(s)] for seq in handle.split(">")[1:] 
                            for n,*s in [seq.split("\n")]]

output:

sequences:

[
 ['sequence1', 'TTGACCGATGACCCCGGTTC'],
 ['sequence2', 'TTGACCGATGACCCCGGTTCAGGCTTCACCACAG'],
 ['sequence3', 'TTGACCGATGACCCCGGTTCAGGCTTCAC']
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...