Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Created on 30 feb. 2054
- @author: Emilio y Celia
- '''
- import urllib.request
- import sys
- import regex as re #pip install regex
- def procesa(bionet, linea):
- #print(linea)
- er_linea = re.compile(r'([A-Z][A-Za-z0-9]+) (?:\([A-Z][A-Za-z0-9]+\))? +([ATCGRYMKSWBDHVN^]+)') #(\([A-Z]\p{L}+\))? reconoce el nombre del porototipo
- resul = er_linea.fullmatch(linea)
- #lista = linea.split() #split no se puede usar en esta practica. Trocea la linea y la devuelve en una lista
- if resul:
- nombre = resul.group(1)
- #print('Nombre de la enzima:', nombre)
- er = resul.group(2).replace('^', '').replace('R','[AG]' ).replace('Y','[CT]').replace('M','[AC]' ).replace('K','[GT]').replace('S','[CG]' ).replace('W','[AT]').replace('B','[CGT]' ).replace('D','[AGT]').replace('H','[ACT]').replace('V','[ACG]').replace('N','[ACGT]')
- #aquí ha reemplazado todas las letras por las secuencias ACGT
- #print('ER:', er)
- mapa = [] #mapa de dianas
- diana = resul.group(2).find('^')
- if diana == -1:
- mapa.append(0)
- else:
- mapa.append(diana)
- #print('Mapa de dianas:', mapa)
- #Introducir esta información en un diccionario
- bionet[nombre] = {'er': er, 'cortes': mapa} #hay que modificar la linea para que haga su funcion. crea una nueva clave del diccionario con un nombre y le pone la er y su mapa
- return bionet
- if __name__ == '__main__':
- print('==============')
- print('Cargando bionet...')
- bionet = {} #nuevo diccionario vacio
- try :
- url = 'http://rebase.neb.com/rebase/link_bionet'
- link = urllib.request.urlopen(url)
- print('Carga finalizada')
- print('--------------')
- for linea in link :
- linea = linea.decode().strip()
- bionet = procesa(bionet, linea)
- except IOError:
- print (' link_bionet no disponible ', file=sys.stderr)
- #gen = input('Introduce un gen: '); NO FUNCIONA EL INPUT EN MI ORDENADOR
- try :
- gen = 'C.AalSMS7ORF2591P'
- url = 'http://rebase.neb.com/cgi-bin/reb_collseq.pl?seqtype=d&enzlist=' + gen
- link = urllib.request.urlopen(url) #implementar para cuando la URL no sea válida.
- nlinea = 1
- cadena = ''
- for linea in link:
- if nlinea == 1:
- if linea.decode().strip()=="No results to print...":
- cadena += linea.decode().strip()
- break
- if nlinea == 2:
- er_linea = re.compile(r'(\d+)\snt') #nucleotidos
- resul = er_linea.search(linea.decode().strip())
- print('--------------', resul.group(1), 'nucleótidos')
- if nlinea >= 4 and nlinea%2 == 0:
- cadena += linea.decode().replace(' ','').replace('\n','') #a partir de la linea 4 y solo las lineas pares, convierte espacios en espacio vacío.
- nlinea+=1
- print(cadena)#esta es la secuencia del gen
- except IOError:
- print (' La cadena introducida es vacía ', file=sys.stderr)
- #-----------------------------------------------------------------------------
- #enzima = input('Introduce una enzima de reconocimiento: '); #pide una cadena al usuario de enzimas NO FUNCIONA EL INPUT
- enzima = 'AaaI'
- array = []
- if enzima.strip() != '': #si no es vacía
- er = bionet[enzima]['er']
- if enzima in bionet: #si la enzima está en el diccionario
- for it in re.compile(er).finditer(cadena): #se hace un iterador de matches a la cadena que contiene el gen
- array.append(it.start()+ bionet[enzima]['cortes'][0]) #suma la posición del mapa a la posicion del comienzo del match del iterador
- else: #si no está la enzima en el diccionario
- for it in re.compile(enzima).finditer(cadena): #cadena que contiene el gen
- array.append(it.start()) #comienzo del match del iterador
- if array == []:
- print ('No existen coincidencias de la enzima #', enzima, '# en el gen "', gen, '"')
- else:
- print(enzima, '#', array) #muestra dónde corta la enzima
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement