Archive

Promenade sur l’adn + fetch

trx337

je ne comprends pas comment on recherche une séquence adn sur le site en question
je suppose qu’il faut déjà connaitre le nom d’une bactérie mais je n’en connais pas non plus . J’ai beau cliquer sur le site , je ne vois pas écrit de séquence adn du genre ATTGGCC

fetch

IsabellePoirier

Bonjour trx337,

Tu peux trouver le nom de bactéries sur le net (par exemple ici), saisir ce nom dans la barre de recherche du site et tu obtiendras la référence correspondante.

trx337

j’ai essayé fetch dans idle ; ça n’a pas l’air de fonctionner :
je vous montre le script :

import fetch
 #borrelia burdorferi P31
 chaine_nucleotides  = fetch.fetch("AE000789")

il repond :
Traceback (most recent call last):
File “C:/Users/genevieve/AppData/Local/Programs/Python/Python37/zbiologie/semaine 1/dessiner21bisadn.py”, line 94, in
import fetch
ModuleNotFoundError: No module named ‘fetch’

trx337

dans la logique des choses vu qu’il n’y avait pas l’url demandé , je me suis dis qu’il fallait écrire soi même la fonction fetch dans un fichier fetch.py au même niveau que mon script . maintenant il comprends fetch mais il me mets une somme d’erreurs colossal :

Traceback (most recent call last):
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1016, in _send_output
    self.send(msg)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 956, in send
    self.connect()
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1392, in connect
    server_hostname=server_hostname)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 412, in wrap_socket
    session=session
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 853, in _create
    self.do_handshake()
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\zbiologie\semaine 1\fetch.py", line 63, in fetch
    return parse(download(url))
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\zbiologie\semaine 1\fetch.py", line 23, in download
    response = urlopen(url)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 563, in error
    result = self._call_chain(*args)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 755, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 543, in _open
    '_open', req)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)>
Could not fetch key AE000789 (exception <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)>)
Traceback (most recent call last):
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1016, in _send_output
    self.send(msg)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 956, in send
    self.connect()
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1392, in connect
    server_hostname=server_hostname)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 412, in wrap_socket
    session=session
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 853, in _create
    self.do_handshake()
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\zbiologie\semaine 1\fetch.py", line 63, in fetch
    return parse(download(url))
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\zbiologie\semaine 1\fetch.py", line 23, in download
    response = urlopen(url)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 563, in error
    result = self._call_chain(*args)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 755, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 543, in _open
    '_open', req)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Users\genevieve\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)>
Could not fetch key AE000789 (exception <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)>)
ThierryParmentelat

le module fetch est pré-installé dans l’environnement des notebooks

pour le faire tourner chez vous, le plus simple est d’aller le prendre sur github, ça se passe ici:

normalement on utilise git pour ce genre de choses, mais vous pouvez aussi bien faire un copier-coller si vous passez par le mode ‘Raw’ c’est-à-dire cette url:

https://raw.githubusercontent.com/parmentelat/flotbioinfo/master/modules/fetch.py

trx337

je ne comprends pas bien votre réponse car j’avais déjà compris que l’on mettait fetch dans un fichier .py puis qu’on le mettait dans le même dossier de celui où l’on travaille
puis que l’on faisait un import fetch. et vous aviez déjà donner votre script en fin de notebook là où je l’ai copier coller hier.

je suppose que c’est vous qui avez écrit ce script .
je ne sais pas ce que c’est que github mais je suppose que c’est un endroit où l’on partage des programmes avec tout le monde .
si vous pouviez me dire ce que c’est que raw ?
En supposant que je mette fetch.py dans un dossier à un niveau inférieur , dans d’autre langage , pour le retrouver on emploie …/dossier(deux points slash) or j’ai essayé cette formule dans python et il ne la comprends pas .

la principale remarque que me donne idle est celle ci :

Could not fetch key AE000789 (exception <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)>)

dans votre script il est écrit : import inspect
je n’ai pas de script inspect.py
le problème ne serait il pas celui là ?

il est écrit également : from urllib.request import urlopen
je ne dois pas avoir également ce script

merci pour votre réponse

ThierryParmentelat

bonjour

ok alors si vous avez déjà en effet retrouvé le script fetch.py et que vous l’avez installé dans votre répertoire, vous pouvez oublier github et raw et tout ça, c’était juste pour vous indiquer où le retrouver.

s’agissant de inspect et urllib, ce sont des modules de la bibliothèque standard, le souci ne me semble pas provenir de là

votre message d’erreur est relatif à la vérification de certificats que fait SSL lorsqu’on cherche à atteindre un site distant au travers de https:// au lieu de simplement http://

or ce qui est curieux c’est que mon fetch.py utilise http !

ce n’est pas forcément facile de debugger ça à distance; je vous recommande d’afficher la valeur de url tel que retourné par ebi_url() en ligne 60

essayez ensuite de voir si vous pouvez ouvrir cette URL depuis votre browser

vous utilisez bien python3 oui ?

trx337

j’ai écrit :

"""
one-stop shopping
"""
url = ebi_url(key)
print("url jonhny ; " , url)

il réponds
http://www.ebi.ac.uk/ena/data/view/AE000789&display=text&download=txt&filename=AE000789.txt
j’ai mis l’adresse dans le browser et il me télécharge un format texte dans lequel on voit ceci : (je ne copie pas tout)

est ce que vous avez demandé à télécharger un fichier texte pour l’exploiter et est ce que ce ne serait pas l’endroit du point texte qui ne serait pas le même chez vous et chez moi qui poserait problème ?

ID AE000789; SV 1; linear; genomic DNA; STD; PRO; 27323 BP.
XX
AC AE000789;
XX

ThierryParmentelat

ok, en effet le serveur ebi redirige nos requêtes http vers https

j’ai tenté de régler le problème pour vous, pouvez-vous essayer avec cette version-ci pour fetch.py

mais comme je ne rencontre pas votre souci je ne peux rien vous garantir :slight_smile:

trx337

merci ça marche

borrelia burdorferi P31
burg

Pasteurella multocida

pasteurlla

une bacterie japonaise : Macrococcus hajekii
Macrococcus%20hajekii

trx337

pour fetch je m’en suis servi pour la semaine 2
dans mes dossiers , il y a semaine1 et semaine2
on peut évidement copier coller fetch dans semaine 2
mais on peut aussi dans d’autres langage utiliser …/semaine1/fetch.py
mais cela ne fonctionne pas dans python
j’ai esasyer de lire sur google la solution mais je n’ai rien compris

IsabellePoirier

Essaie en ajoutant cela dans le programme qui veut importer fetch :

import  sys
sys.path.append(chemin_vers_semaine1)

trx337

merci , je vais essayer
ce que je ne comprends pas non plus est ceci :

print("{:03d}:{} [{}] -> {}".format(indice, lettre, court, long))

je comprends bien que les parenthèses sont remplacées par l’indice , la lettre etc
mais le 03d m’est incompréhensible , la lettre d n’est pas déclarée donc ce n’est pas une variable .

IsabellePoirier

Bonjour trx337,

C’est pour mettre en forme le nombre affiché.
d indique qu’il s’agit d’afficher un nombre entier.
:03 permet d’aligner le nombre à droite en complétant éventuellement par des zéros.

Teste ceci :

    indice = 2
    print("{:03d}".format(indice))

Il est possible de faire bien plus de choses avec cette méthode format ; tu trouveras davantage de renseignements dans la documentation Python.

trx337

bonjour Isabelle en ce lundi matin
je n’arrive pas ; j’ai écrit ceci :

#import fetch
import sys
sys.path.append(…/semaine1/fetch)

il ne comprends pas …/ et si on l’enlève , il ne comprends pas semaine 1
et fetch on l’écrit fetch ou bien fetch.py ?
et faut il garder import fetch ?

ThierryParmentelat

bonjour trx

pour la voie indiquée par Isabelle il faut mettre le chemin entre quotes, genre
sys.path.append("../semaine2")

si vous mettez fetch.py dans le répertoire semaine1, vous pouvez faire

tparment /tmp/semaine1 $ python3
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from fetch import fetch
>>> fetch(12)
-> fetch 12
>>> exit()

tparment /tmp/semaine1 $ cd ../semaine2
tparment /tmp/semaine2 $ python3
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("../semaine1")
>>> from fetch import fetch
>>> fetch(25)
-> fetch 25
>>>
trx337

bonjour

j’ai écrit ceci mais cela ne marche toujours pas donc je vais abandonner:

import sys
sys.path.append("../semaine1/fetch")

je ne comprends pas autre chose : au sujet de import
dans mon livre , ils expliquent que l’on peut importer juste une fonction du script comme ceci :

premier script

traductionAdnEnArn.py

> def traduction_adn_en_arn(adn):
>     arn = ""
>     for nucleotide in adn:
>         if nucleotide == 'T':
>             arn += 'U'
>         else:
>              arn += nucleotide
>     return arn
> 
> 
> def rappel():
>     print("rapel")
> 
> rappel()

deuxième script

essaiImport.py
from traductionAdnEnArn import traduction_adn_en_arn

il réponds :
rapel

vu que je lui ai demandé de n’importer que la fonction import traduction_adn_en_arn
il n’est pas logique qu’il exécute la fonction rappel()

IsabellePoirier

Bonjour trx337,

Dans le path, il faut ajouter le dossier qui contient le fichier fetch, et non le fichier lui-même.
C’est donc :

import sys
sys.path.append("../semaine1")

qu’il faudrait essayer.

IsabellePoirier

Concernant ta deuxième question, en fait, lorsqu’on importe un module, les instructions de celui-ci sont exécutées.
L’instruction
from traductionAdnEnArn import traduction_adn_en_arn
permet ensuite d’avoir accès à la fonction traduction_adn_en_arn dans le reste du programme.
Si tu veux éviter que l’appel à la fonction rappel se fasse, il faut préciser dans le script traductionAdnEnArn.py que cet appel ne doit se faire que lorsque ce fichier est directement exécuté, et non lors d’un import.

if __name__ == __main__:
   rappel()
trx337

merci

trx337
import sys
sys.path.append("../semaine1")

small  = fetch.fetch("QCO90966")

il ne trouve pas fetch
je rappelle que j’ai un dossier biologie dans lequel se trouve deux dossiers semaine1 et semaine2
vu que je travaille dans semaine2 et que fetch se trouve dans semaine1 , en principe on écrit …/ semaine1
faut il aussi écrire import fetch ?

IsabellePoirier

Oui, il faut aussi importer le module.
L’instruction sys.path.append("…/semaine1") permet seulement de dire à Python d’aller chercher les modules à importer dans ce dossier-là, s’ils ne les trouve pas ailleurs.

trx337

ben voilà ça y est ça marche ;
il fallait écrire :
import sys
sys.path.append("…/semaine1")
import fetch

merci

ChristelleMariais

Bonjour,
Avez-vous essayé de cliquer sur le symbole “…” à côté de répondre en bas du message à supprimer ? Ce bouton permet de faire apparaître des actions supplémentaires dont le bouton “corbeille” pour supprimer le message.

Bonne journée.

Christelle

trx337

merci ça a marché

cypher43

bonjour ,
j’ai egalement une erreure lors de l’utilisation de fetch.
‘could not fetch key AE000789.txt (exception ‘ascii’ codec can’t encode character ‘\xe9’ in position 30: ordinal not in range(128))’
suivie de nombreuses erreures…’’

ThierryParmentelat

bonjour

je n’arrive pas à reproduire votre souci; dans quel contexte êtes-vous (notebooks, ordi personnel ?)

si possible envoyez-vous une copie d’écran ce sera plus facile pour nous de comprendre ce que vous essayez de faire

cypher43


oui, c’est sur jupyter sur mon ordi

ThierryParmentelat

je ne suis pas sûr que ce soit ça, mais vous en tous cas fetch s’attend à un argument du genre de "AE00798", et non pas, comme vous l’appelez vous, un chemin d’accès à un fichier

cypher43

ha oui mince,
merci pour l’aide