#!/usr/bin/env python # -*-coding:Utf-8 -*- ####################### Recherche motif sequence FASTA - Expression reguliere (E. Jaspard 2017) ################ import sys import re from Bio import SeqIO # Le systeme SeqIO retourne des objects de type "SeqRecord" ####################### FONCTION lecture de fichier ####################### def LectureFichier(FichierTraite): # ----- 1ere partie : Test ouverture du fichier et instruction de sortie si erreur ----- try : OuvertureFichier = open(FichierTraite, 'r') # la variable "FichierTraite" designe n'importe quel fichier que l'on desire ouvrir except IOError : print "Erreur d'ouverture de fichier",FichierTraite sys.exit() # ----- 2eme partie : "parsing" des differents items qui commencent par ">" du fichier a lire ----- indice = 0 for ChaqueSequence in SeqIO.parse(FichierTraite, 'fasta'): #SeqIO.write([ChaqueSequence], open(ChaqueSequence.id[:-2]+'.fa', 'w'), 'fasta') # Si fichier GenBank (par exemple) => remplacer ".fa" par ".gbk" et "fasta" par "genbank" indice = indice+1 print ("Sequence numero"), indice print(ChaqueSequence.format("fasta")) #.format() est une methode qui convertit l'objet "SeqRecord" en une chaine en utilisant l'une des options de sortie de Bio.SeqIO # ----- 3eme partie : Decoupage des lignes du fichier lu ----- PremiereLigneFichier = OuvertureFichier.readline().strip() # la methode "readline()" lit une ligne a la fois => en l'occurence la 1ere ligne : ">Texte informatif" # cette methode n'est appelee qu'une fois donc seule la 1ere ligne est traitee / # la methode readline() renvoie une CHAINE DE CARACTERES # la methode "strip()" enleve "\n" de fin de ligne Sequence = '' # initialise la variable chaine de caractere "sequence" qui est vide au depart for ligne in OuvertureFichier.readlines(): # methode "readlines()" : attention au "s" cette fois / cette methode lit toutes les lignes ("for") # a partir de la 2eme ligne puisque readline() precedent a place le curseur sur la 2eme ligne # la methode readlines() renvoie une LISTE ligne.strip() # la methode "strip()" enleve "\n" de fin de chaque ligne en cours Sequence = Sequence + ligne.strip() # concatene la ligne en cours avec la precedente => la variable sequence ajoute chaque nouvelle ligne lue return(PremiereLigneFichier, Sequence) # renvoie 2 variables : la variable PremiereLigneFichier et la variable Sequence OuvertureFichier.close() # Attention a l'indentation sinon "NameError: name 'OuvertureFichier' is not defined ####################### FONCTION recherche du motif ####################### def RechercheMotif(Motif, ChainAtraiter): # "Motif" est le nom generique de la variable specifique passee en 1er parametre lors de l'appel de la fonction "RechercheMotif" # "ChainAtraiter" est le nom generique de la variable specifique passee en 2e parametre lors de l'appel de la fonction "RechercheMotif" (dans le cas present la variable "sequence") MotifTransforme = re.compile(Motif) # la methode "compile" : transforme en veritable expression reguliere MotifTrouve = re.finditer(MotifTransforme, ChainAtraiter) # la methode "finditer" : recherche toutes les occurences du motif considere de gauche a droite et enregistre les positions de ce motif / # ces positions sont renvoyees par la suite avec les methodes "start()" et "end()" ci-dessous for position in MotifTrouve: print position.start(),"-",position.end()," : ", position.group() # Exemple de positions de debut et de fin d'un motif trouve => 2 - 6 : HLGH et la methode "group()" renvoie le motif trouve return MotifTrouve # attention : indenter le "return" print("\n") # Retour a la ligne ####################### Entree des donnes a traiter : fichier a lire et motif recherche ####################### FichierTraite = raw_input("Nom du fichier de sequence : ") (PremiereLigneFichier, Sequence) = LectureFichier(FichierTraite) print "############## Resultat intermediaire ##############" print "Variable Premiere ligne du fichier : ", PremiereLigneFichier print "Variable Sequence : ", Sequence print "Longueur de la sequence : ", len(Sequence) print("\n") # Retour a la ligne ExprREGUL = raw_input("Expression reguliere / exemple : GA[ATGC]{3}AC : ") ####################### Resultats ####################### print "############## Resultat final ##############" #ResPremierMotif = RechercheMotif('[HT][LIVMYAC]G[HNTG]', Sequence) # prend comme parametre de la fonction "RechercheMotif" : Motif = [HT][LIVMYAC]G[HNTG] et ChainAtraiter = Sequence ResExpRegul = RechercheMotif(ExprREGUL, Sequence) # prend comme parametre de la fonction "RechercheMotif" : Motif = ExprREGUL et ChainAtraiter = Sequence