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
Promenade sur l’adn + fetch


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.

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’

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)>)

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

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

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 ?

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

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

merci ça marche
borrelia burdorferi P31
Pasteurella multocida
une bacterie japonaise : Macrococcus hajekii

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

Essaie en ajoutant cela dans le programme qui veut importer fetch :
import sys
sys.path.append(chemin_vers_semaine1)

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 .

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.

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 ?

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
>>>

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 :
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()

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.

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()

merci

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 ?

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.

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

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

merci ça a marché

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…’’

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

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

ha oui mince,
merci pour l’aide