2017-10-20 9 views
1

Je suis en train d'utiliser Biopython pour extraire toutes les séquences d'ADN à partir d'un fichier FASTA contenant une correspondance avec la courte séquence d'ADN suivante: « GGCTCAACCCTGGA »En utilisant Biopython pour trouver et extraire FASTA correspond à exacte séquence d'ADN

Voici ce que j'ai jusqu'à présent:

from Bio import SeqIO 

source = "rep_set_no_spaces.fasta" 
outfile = "rep_set_PNA_matches.fasta" 
seq1 = "GGCTCAACCCTGGA" 

# basically a function to check whether seq contains sub1 
def seq_check(seq, seq1): 
    return seq.find(seq1) 

seqs = SeqIO.parse(source, 'fasta') 
filtered = (seq for seq in seqs if seq_check(seq.seq, seq1)) 
SeqIO.write(filtered, outfile, 'fasta') 

Je suis en train d'adapter le code de ce poste (Filtering a FASTA file based on sequence with BioPython), mais ma séquence d'intérêt est ni au début, ni fin de la séquence ...

Par exemple, voici quelques uns de mes sequen ces ... la 1ère et la 4ème séquence, mais pas la 2ème et la 3ème. Je veux sortir des séquences faire un nouveau fichier FASTA avec seulement ces séquences qui contiennent « GGCTCAACCCTGGA »:

>110148arco.1D_184193 
TACGGAGGGGGTTAGCGTTGTTCGGAATTACTGGGCGTAAAGCGCACGTAGGTGGATTGGAAAGTATGGGGTGAAATCCCAGGGCTCAACCCTGGAACTGCCTCATAAACTATCAGTCTAGAGTTCGAGAGAGGTGAGTGGAATTCCGAGTGTAGAGGTGAAATTCGTAGATATTCGGAGGAACACCAGTGGCGAAGGCGGCTCACTGGCTCGATACTGACACTGAGGTGCGAAAGTGTGGGGAGCAAACAGG 
>110475arco.1D_40770 
TACGGAGGGTGCGAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGCGGTTTGTTAAGTCAGCTGTGAAAGCCCTGGGCTCAACCTGGGAATTGCAGTTGATACTGGCAAGCTGGAGTACGAGAGAGGGAGGTAGAATTCCATGTGTAGCGGTGAAATGCGTAGATATATGGAGGAATACCAGTGGCGAAGGCGGCCTCCTGGCTCGATACTGACGCTGAGGTGCGAAAGCGTGGGGAGCAAACAGG 
>110484arco.1D_190999 
TACGGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGCGGTTTGTTAAGTCAGCTGTGAAAGCCCTGGGCTCAACCTGGGAATTGCAGTTGATACTGATCGACTAGAGTACGAGAGAGGGAGGTAGAATTCCACGTGTAGCGGTGAAATGCGTAGATATGTGGAGGAATACCGGTGGCGAAGGCGGCCTCCTGGCTCGATACTGACGCTGAGGTGCGAAAGCGTGGGGAGCAAACAGG 
>110525amin.3D_40107 
TACGGAGGGGGCTAGCGTTGTTCGGAATTACTGGGCGTAAAGCGTACGTAGGCGGATTAGTAAGTAAGATGTGAAATCCCAGGGCTCAACCCTGGAACTGCATTTTAAACTGCTAGTCTAGAGTTATGGAGAGGTAAGTGGAATTCCTAGTGTAGAGGTGAAATTCGTAGATATTAGGAGGAACACCAGAGGCGAAGGCGACTTACTGGACATATACTGACGCTGAGGTACGAAAGTGTGGGTAGCAAACAGG 

Merci!

Répondre

1

En fait, cette question ne concerne pas Biopython mais de Python:

def seq_check(seq, seq1): 
    if seq1 in seq: 
     return True 
    else: 
     return False 

Vous pouvez aussi le mettre directement dans votre expression du générateur:

filtered = (seq for seq in seqs if seq1 in seq) 
+1

Encore plus succinent: 'def seq_check (seq, seq1): return seq1 dans seq' – BioGeek

+0

Merci pour les réponses! Cela a fonctionné parfaitement :) –

+0

@Brooke_W Si la réponse a résolu votre problème, vous devez accepter la réponse – Markus