Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. '''
  2. Created on 30 feb. 2054
  3.  
  4. @author: Emilio y Celia
  5. '''
  6.  
  7. import urllib.request
  8. import sys
  9. import regex as re #pip install regex
  10.  
  11. def procesa(bionet, linea):
  12. #print(linea)
  13.  
  14. 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
  15. resul = er_linea.fullmatch(linea)
  16. #lista = linea.split() #split no se puede usar en esta practica. Trocea la linea y la devuelve en una lista
  17.  
  18. if resul:
  19. nombre = resul.group(1)
  20. #print('Nombre de la enzima:', nombre)
  21.  
  22. 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]')
  23. #aquí ha reemplazado todas las letras por las secuencias ACGT
  24. #print('ER:', er)
  25.  
  26. mapa = [] #mapa de dianas
  27. diana = resul.group(2).find('^')
  28. if diana == -1:
  29. mapa.append(0)
  30. else:
  31. mapa.append(diana)
  32.  
  33. #print('Mapa de dianas:', mapa)
  34.  
  35. #Introducir esta información en un diccionario
  36. 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
  37.  
  38. return bionet
  39.  
  40.  
  41. if __name__ == '__main__':
  42. print('==============')
  43. print('Cargando bionet...')
  44.  
  45. bionet = {} #nuevo diccionario vacio
  46.  
  47. try :
  48. url = 'http://rebase.neb.com/rebase/link_bionet'
  49. link = urllib.request.urlopen(url)
  50. print('Carga finalizada')
  51. print('--------------')
  52.  
  53. for linea in link :
  54. linea = linea.decode().strip()
  55. bionet = procesa(bionet, linea)
  56.  
  57. except IOError:
  58. print (' link_bionet no disponible ', file=sys.stderr)
  59.  
  60. #gen = input('Introduce un gen: '); NO FUNCIONA EL INPUT EN MI ORDENADOR
  61. try :
  62. gen = 'C.AalSMS7ORF2591P'
  63. url = 'http://rebase.neb.com/cgi-bin/reb_collseq.pl?seqtype=d&enzlist=' + gen
  64. link = urllib.request.urlopen(url) #implementar para cuando la URL no sea válida.
  65. nlinea = 1
  66. cadena = ''
  67. for linea in link:
  68. if nlinea == 1:
  69. if linea.decode().strip()=="No results to print...":
  70. cadena += linea.decode().strip()
  71. break
  72. if nlinea == 2:
  73. er_linea = re.compile(r'(\d+)\snt') #nucleotidos
  74. resul = er_linea.search(linea.decode().strip())
  75. print('--------------', resul.group(1), 'nucleótidos')
  76.  
  77. if nlinea >= 4 and nlinea%2 == 0:
  78. cadena += linea.decode().replace(' ','').replace('\n','') #a partir de la linea 4 y solo las lineas pares, convierte espacios en espacio vacío.
  79. nlinea+=1
  80. print(cadena)#esta es la secuencia del gen
  81.  
  82. except IOError:
  83. print (' La cadena introducida es vacía ', file=sys.stderr)
  84.  
  85.  
  86.  
  87. #-----------------------------------------------------------------------------
  88. #enzima = input('Introduce una enzima de reconocimiento: '); #pide una cadena al usuario de enzimas NO FUNCIONA EL INPUT
  89.  
  90. enzima = 'AaaI'
  91. array = []
  92.  
  93. if enzima.strip() != '': #si no es vacía
  94.  
  95. er = bionet[enzima]['er']
  96. if enzima in bionet: #si la enzima está en el diccionario
  97. for it in re.compile(er).finditer(cadena): #se hace un iterador de matches a la cadena que contiene el gen
  98. array.append(it.start()+ bionet[enzima]['cortes'][0]) #suma la posición del mapa a la posicion del comienzo del match del iterador
  99. else: #si no está la enzima en el diccionario
  100. for it in re.compile(enzima).finditer(cadena): #cadena que contiene el gen
  101. array.append(it.start()) #comienzo del match del iterador
  102.  
  103. if array == []:
  104. print ('No existen coincidencias de la enzima #', enzima, '# en el gen "', gen, '"')
  105. else:
  106. print(enzima, '#', array) #muestra dónde corta la enzima
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement