« Tutorial python » : différence entre les versions
Aller à la navigation
Aller à la recherche
(→Code) |
(→Code) |
||
Ligne 7 : | Ligne 7 : | ||
<nowiki> | <nowiki> | ||
A | ################################################## | ||
#### 1. Commentaires et chaine de charactères #### | |||
################################################## | |||
# Ce tutorial utilise la version 3 de python | |||
# Un commentaire est une ligne de code commençant par le charactère "#", il ne sera pas interprété par python | |||
# Un commentaire sur plusieurs ligne peut être effectué à l'aide de la chaine de caractères ''' avant | |||
# et après le block à commenter. Cependant ce n'est pas le rôle principal de ''' dont le but est plutôt | |||
# de déterminer une longue chaine de caractère | |||
''' | |||
Ceci est un commentaire en bloc | |||
Ce commentaire s'étend | |||
sur trois lignes | |||
''' | |||
x=''' | |||
En réalité, cette façon de faire | |||
correspond plutôt à la création | |||
d'une longue chaine de caractère | |||
''' | |||
x | |||
# print est une fonction qui permet de visualiser la variable passée en paramètre (avec formatage) | |||
print(x) | |||
# Une chaine de charactère est généralement déclaré avec simplement le | |||
# charactère ' ou " avant et après la chaine | |||
x='mon prénom est "Vincent"' | |||
print(x) | |||
x="mon prénom est 'Vincent'" | |||
print(x) | |||
x='mon prénom est \'Vincent\'' | |||
print(x) | |||
y_2='une chaine de charactère' | |||
# Ces chaines peuvent être concaténée avec l'opérateur + | |||
y_1="\nCeci est un exemple d'" | |||
y_3=' (ou "string")' | |||
y=y_1+y_2+y_3 | |||
print(y) | |||
y=y_1+y_2+'\n'+y_3 | |||
print(y) | |||
# l'opérateur * permet de multiplier le "pattern" de la chaine de charactère | |||
x='\n'+'1e poussin fait '+'piou'*2+'\n' | |||
print(x) | |||
# Un nombre réel ou entier peut être converti en string via la fonction str | |||
x=1000 | |||
y=str(x) | |||
print('voici un nombre converti en string (fonction str) : '+y) | |||
print('\n'+'-'*50+'\n') | |||
################################### | |||
#### 2. Modules et importation #### | |||
################################### | |||
# python permet d'installer facilement divers modules via la console cmd.exe ou un terminal mac | |||
# en tapant directement la commande "pip install XXX" ou XXX est le module désiré. | |||
# Une fois le module XXX installé on utilise "import XXX" dans le script python pour pouvoir utiliser | |||
# les fonctionalités du module. | |||
import urllib.request | |||
# la fonction dir permets de retrouver les caractéristiques et méthodes rattachés au module | |||
dir(urllib.request) | |||
# On peut aussi utiliser "from XXX import YYY" pour importer la fonction YYY du module XXX. | |||
from urllib.request import urlopen | |||
# la fonction dir peut aussi être appliquée à une fonction | |||
dir(urlopen) | |||
print(urlopen.__doc__) | |||
# certain modules sont déjà pré-installé, d'autres nécessite l'installation via pip install | |||
# d'autres modules plus spécifiques doivent éventuellement être installé manuellement selon | |||
# des instructions particulières. certain modules requier la présence d'autre modules. | |||
import requests | |||
# si le module n'est pas installé, tapez "pip install request" dans une console de votre portable | |||
print('\n'+'-'*50+'\n') | |||
############################################################ | |||
#### 3. déclaration de variables et opéarations simples #### | |||
############################################################ | |||
# Déclaration d'un entier | |||
x=4 | |||
print('voici un nombre entier : '+str(x)) | |||
# Déclaration d'un réel | |||
y=4.4 | |||
print('voici un nombre réel : '+str(y)) | |||
#opération simples | |||
z=x+y | |||
print("voici le résultat de l'addition : "+str(z)) | |||
# Attention la variable x à été convertie automatiquement en variable réelle | |||
# La conversion "propre" s'obtient à l'aide des fonctions suivantes | |||
x_float=float(x) | |||
y_int=int(y) | |||
print('conversion en float : '+str(x_float)) | |||
print('conversion en int : '+str(y_int)) | |||
# la fonction type permet d'afficher le type de variable | |||
print(type(x)) | |||
print(type(x_float)) | |||
print(type(y)) | |||
print(type(y_int)) | |||
# Attention de mauvaises surprises peuvent subvenir quand on oublie le type de la variable | |||
# et que l'on mélange des variables de type différent (seulement en python 2) | |||
x=4/3 | |||
print('4/3 ='+str(x)) | |||
x=4/3.0 | |||
print('4/3.0 ='+str(x)) | |||
x=1.0*4/3 | |||
print('1.0*4/3 ='+str(x)) | |||
x=(1.0*4)/3 | |||
print('(1.0*4)/3 ='+str(x)) | |||
x=1.0*(4/3) | |||
print('1.0*(4/3) ='+str(x)) | |||
print(str(x)) | |||
print(int(x)) | |||
print(float(x)) | |||
# Une astuce rapide consiste en cas de doute à multiplier une variable entière ou réelle | |||
# par le nombre réel 1.0, ce qui rend en sortie une variable réelle de même valeur | |||
# Exposant et modulo | |||
print('Exposant : 4**2 = '+str(4**2)) | |||
print('Modulo : 4.4%2 = '+str(4.4%2)) | |||
print(int(4.4)+(4.4%2)) | |||
# des fonctions mathematiques | |||
import math | |||
x=2*math.pi | |||
x_sqrt=math.sqrt(x) | |||
e_exp_x=math.exp(x) | |||
cos_x=math.cos(x) | |||
print(x,x_sqrt,e_exp_x,cos_x) | |||
print('\n'+'-'*50+'\n') | |||
####################### | |||
#### 4. conditions #### | |||
####################### | |||
x=5 | |||
y='5' | |||
z=int(float(x)) | |||
x==y | |||
x==z | |||
x==y and x==z | |||
x==y or x==z | |||
condition=x==y | |||
if condition: | |||
print('yes') | |||
else: | |||
print('non') | |||
condition=x==z | |||
if condition: | |||
print('yes') | |||
else: | |||
print('non') | |||
x=5.5 | |||
y=5.55 | |||
z=5.45 | |||
print(x<y) | |||
print(y<z) | |||
print(x<y<z) | |||
print(z<x<y) | |||
print(x<y and y<z) | |||
print(x<y or y<z) | |||
print(x<=y) | |||
print(x<=x) | |||
print(x<x) | |||
print('\n'+'-'*50+'\n') | |||
################################# | |||
#### 5. boucles for et while #### | |||
################################# | |||
liste=[] | |||
print(liste) | |||
liste.append(5) | |||
liste.append(2.45) | |||
liste.append('un') | |||
liste.append('une') | |||
liste.append('des') | |||
print(liste) | |||
# un élément de la liste (la première position est l'indice 0) | |||
print(liste[0]) | |||
print(liste[2]) | |||
# la longeur de la liste est données par la fonction "len" | |||
print(len(liste)) | |||
# le dernier élément de la liste | |||
print(liste[len(liste)-1]) | |||
print(liste[-1]) | |||
# extraire plusieurs éléments de la liste | |||
print(liste[2:4]) | |||
print(liste[:4]) | |||
print(liste[2:]) | |||
print(liste[-3:]) | |||
print(liste[:-3]) | |||
print(liste[-3:-1]) | |||
# boucle "for" | |||
for i in range(3): | |||
print(liste[i]) | |||
for i in range(len(liste)): | |||
print(liste[i]) | |||
for element in liste: | |||
print(element) | |||
# boucle "while" | |||
compteur=0 | |||
while compteur<len(liste): | |||
print(liste[compteur]) | |||
compteur+=1 | |||
print('\n'+'-'*50+'\n') | |||
############################## | |||
#### 6 functions creation #### | |||
############################## | |||
def ma_fonction(): | |||
compteur_max=10 | |||
compteur=1 | |||
while compteur<compteur_max: | |||
if compteur%2==0: | |||
print(compteur) | |||
compteur+=1 | |||
ma_fonction() | |||
print('\n'+'-'*10+'\n') | |||
def ma_fonction_param(compteur_max=20,modulo=3): | |||
compteur=1 | |||
while compteur<compteur_max: | |||
if compteur%modulo==0: | |||
print(compteur) | |||
compteur+=1 | |||
ma_fonction_param() | |||
print('\n'+'-'*10+'\n') | |||
ma_fonction_param(40) | |||
print('\n'+'-'*10+'\n') | |||
ma_fonction_param(40,10) | |||
print('\n'+'-'*50+'\n') | |||
################################ | |||
#### 6 read and write files #### | |||
################################ | |||
# read | |||
nom_fichier='C:/Users/buntinx/Dropbox/DHBachelor2018/tutorial_python/Lexique381.txt' | |||
fichier=open(nom_fichier,'r') | |||
text=fichier.read() | |||
fichier.close() | |||
text=text.split('\n') | |||
for i in range(len(text)): | |||
text[i]=text[i].split('\t') | |||
text=text[:(len(text)-1)] | |||
for i in range(30,60): | |||
print(text[i][0]+' / '+text[i][3]) | |||
print('\n'+'-'*10+'\n') | |||
for i in range(60,30,-1): | |||
print(text[i][0]+' / '+text[i][3]) | |||
print('\n'+'-'*10+'\n') | |||
for i in range(59,29,-1): | |||
print(text[i][0]+' / '+text[i][3]) | |||
# write | |||
fichier=open('monlexique.txt', "w") | |||
for i in range(len(text)): | |||
fichier.write(text[i][0]+' / '+text[i][3]+'\n') | |||
fichier.close() | |||
def fct_write(name): | |||
fichier=open(name, "w") | |||
for i in range(100): | |||
if i%5==0: | |||
fichier.write(str(i)+'\n') | |||
fichier.close() | |||
def fct_read(name): | |||
fichier=open(name, 'r') | |||
text=fichier.read() | |||
fichier.close() | |||
text=text.split('\n') | |||
text=text[:(len(text)-1)] | |||
nombre=[] | |||
for i in range(len(text)): | |||
if i%2==0: | |||
nombre.append(int(text[i])) | |||
return nombre | |||
fct_write('exercice.txt') | |||
x=fct_read('exercice.txt') | |||
print(x) | |||
print('\n'+'-'*50+'\n') | |||
############################################# | |||
#### 7. Graphiques matplotlib #### | |||
############################################# | |||
import matplotlib as plt | |||
from matplotlib.pyplot import figure, show, plot | |||
from numpy import arange, sin, pi | |||
t=arange(0.0, 5.0, 0.01) | |||
plot(t,sin(2*pi*t)) | |||
show() | |||
fig=figure() | |||
ax1=fig.add_subplot(211) | |||
ax1.plot(t,sin(2*pi*t)) | |||
ax1.grid(True) | |||
ax1.set_ylim((-2, 2)) | |||
ax1.set_ylabel('1 Hz') | |||
ax1.set_title('A sine wave or two') | |||
for label in ax1.get_xticklabels(): | |||
label.set_color('r') | |||
ax2=fig.add_subplot(212) | |||
ax2.plot(t, sin(2*2*pi*t)) | |||
ax2.grid(True) | |||
ax2.set_ylim((-2, 2)) | |||
l=ax2.set_xlabel('Axis x') | |||
l.set_color('g') | |||
l.set_fontsize('large') | |||
show() | |||
############################### | |||
#### 8. scrapping web data #### | |||
############################### | |||
from urllib.request import urlopen | |||
from bs4 import BeautifulSoup | |||
response=urlopen("https://fr.wikipedia.org/wiki/Liste_des_capitales_du_monde") | |||
page_source=response.read() | |||
soup=BeautifulSoup(page_source,'html.parser') | |||
capitales_and_countries=[] | |||
for primitive in soup.findAll("table"): | |||
if primitive.find("th").string=='Capitale': | |||
for cap_and_count in primitive.findAll("td"): | |||
for text in cap_and_count.findAll("a"): | |||
if text.string != None: | |||
capitales_and_countries.append(text.string) | |||
for i in range(len(capitales_and_countries)): | |||
print(capitales_and_countries[i]) | |||
print('\n'+str(len(capitales_and_countries))+' capitales and countries listed\n') | |||
# exercice: Scrapper des prénoms sur | |||
# https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie | |||
response=urlopen("https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie") | |||
page_source=response.read() | |||
soup=BeautifulSoup(page_source,'html.parser') | |||
prenoms=[] | |||
for dlTag in soup.findAll('dl'): | |||
for ddTag in dlTag.findAll('dd'): | |||
bTag = ddTag.find('b') | |||
if bTag: | |||
aTag = bTag.find('a') | |||
if aTag: | |||
prenoms.append(aTag.string) | |||
for i in range(len(prenoms)): | |||
print(prenoms[i]) | |||
print('\n'+str(len(prenoms))+' first names listed\n') | |||
################################## | |||
#### 9. Mediawiki bot example #### | |||
################################## | |||
import requests | |||
from bs4 import BeautifulSoup | |||
user='testbot' | |||
passw='dhbot2017' | |||
baseurl='http://wikipast.epfl.ch/wikipast/' | |||
summary='Wikipastbot update' | |||
names=['Madame X','Monsieur Y'] | |||
# Login request | |||
payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} | |||
r1=requests.post(baseurl + 'api.php', data=payload) | |||
#login confirm | |||
login_token=r1.json()['query']['tokens']['logintoken'] | |||
payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} | |||
r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) | |||
#get edit token2 | |||
params3='?format=json&action=query&meta=tokens&continue=' | |||
r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) | |||
edit_token=r3.json()['query']['tokens']['csrftoken'] | |||
edit_cookie=r2.cookies.copy() | |||
edit_cookie.update(r3.cookies) | |||
# 1. retrouver le contenu et l'imprimer | |||
for name in names: | |||
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | |||
soup=BeautifulSoup(result.text, "lxml") | |||
code='' | |||
for primitive in soup.findAll("text"): | |||
code+=primitive.string | |||
print(code) | |||
# 2. changer le contenu | |||
# écraser le contenu précédent: | |||
for name in names: | |||
content='==Contenu==\nVoici un contenu qui a écrasé le précédent\n' | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
print(r4.text) | |||
# rajouter du contenu: | |||
for name in names: | |||
#content='\n==Contenu rajouté==\nVoici du contenu rajouté\n' | |||
content='abcdef' | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','appendtext':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
print(r4.text) | |||
# exercice: Faire un bot qui rajoute des commentaires sur les pages "Madame X" et "Monsieur Y" ou bien en change son contenu | |||
# exemple: remplacement de mots par d'autres, inversions de majuscules et minuscules, etc.... | |||
import requests | |||
from bs4 import BeautifulSoup | |||
user='testbot' | |||
passw='dhbot2017' | |||
baseurl='http://wikipast.epfl.ch/wikipast/' | |||
summary='Wikipastbot update' | |||
names=['Madame X','Monsieur Y'] | |||
# Login request | |||
payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} | |||
r1=requests.post(baseurl + 'api.php', data=payload) | |||
#login confirm | |||
login_token=r1.json()['query']['tokens']['logintoken'] | |||
payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} | |||
r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) | |||
#get edit token2 | |||
params3='?format=json&action=query&meta=tokens&continue=' | |||
r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) | |||
edit_token=r3.json()['query']['tokens']['csrftoken'] | |||
edit_cookie=r2.cookies.copy() | |||
edit_cookie.update(r3.cookies) | |||
def minuscule(name): | |||
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | |||
soup=BeautifulSoup(result.text, "lxml") | |||
content='' | |||
for primitive in soup.findAll("text"): | |||
content+=primitive.string | |||
content=content.lower() | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
print(r4.text) | |||
def majuscule(name): | |||
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | |||
soup=BeautifulSoup(result.text, "lxml") | |||
content='' | |||
for primitive in soup.findAll("text"): | |||
content+=primitive.string | |||
content=content.upper() | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
print(r4.text) | |||
majuscule('Monsieur Y') | |||
minuscule('Monsieur Y') | |||
majuscule('Madame X') | |||
</nowiki> | </nowiki> |
Version du 20 mars 2018 à 13:23
Info
Ceci est une introduction simple au language python en vue de programmer un bot Wikipast. Le fichier "Lexique381.txt" peut être téléchargé à l'adresse http://www.lexique.org/telLexique.php.
Code
################################################## #### 1. Commentaires et chaine de charactères #### ################################################## # Ce tutorial utilise la version 3 de python # Un commentaire est une ligne de code commençant par le charactère "#", il ne sera pas interprété par python # Un commentaire sur plusieurs ligne peut être effectué à l'aide de la chaine de caractères ''' avant # et après le block à commenter. Cependant ce n'est pas le rôle principal de ''' dont le but est plutôt # de déterminer une longue chaine de caractère ''' Ceci est un commentaire en bloc Ce commentaire s'étend sur trois lignes ''' x=''' En réalité, cette façon de faire correspond plutôt à la création d'une longue chaine de caractère ''' x # print est une fonction qui permet de visualiser la variable passée en paramètre (avec formatage) print(x) # Une chaine de charactère est généralement déclaré avec simplement le # charactère ' ou " avant et après la chaine x='mon prénom est "Vincent"' print(x) x="mon prénom est 'Vincent'" print(x) x='mon prénom est \'Vincent\'' print(x) y_2='une chaine de charactère' # Ces chaines peuvent être concaténée avec l'opérateur + y_1="\nCeci est un exemple d'" y_3=' (ou "string")' y=y_1+y_2+y_3 print(y) y=y_1+y_2+'\n'+y_3 print(y) # l'opérateur * permet de multiplier le "pattern" de la chaine de charactère x='\n'+'1e poussin fait '+'piou'*2+'\n' print(x) # Un nombre réel ou entier peut être converti en string via la fonction str x=1000 y=str(x) print('voici un nombre converti en string (fonction str) : '+y) print('\n'+'-'*50+'\n') ################################### #### 2. Modules et importation #### ################################### # python permet d'installer facilement divers modules via la console cmd.exe ou un terminal mac # en tapant directement la commande "pip install XXX" ou XXX est le module désiré. # Une fois le module XXX installé on utilise "import XXX" dans le script python pour pouvoir utiliser # les fonctionalités du module. import urllib.request # la fonction dir permets de retrouver les caractéristiques et méthodes rattachés au module dir(urllib.request) # On peut aussi utiliser "from XXX import YYY" pour importer la fonction YYY du module XXX. from urllib.request import urlopen # la fonction dir peut aussi être appliquée à une fonction dir(urlopen) print(urlopen.__doc__) # certain modules sont déjà pré-installé, d'autres nécessite l'installation via pip install # d'autres modules plus spécifiques doivent éventuellement être installé manuellement selon # des instructions particulières. certain modules requier la présence d'autre modules. import requests # si le module n'est pas installé, tapez "pip install request" dans une console de votre portable print('\n'+'-'*50+'\n') ############################################################ #### 3. déclaration de variables et opéarations simples #### ############################################################ # Déclaration d'un entier x=4 print('voici un nombre entier : '+str(x)) # Déclaration d'un réel y=4.4 print('voici un nombre réel : '+str(y)) #opération simples z=x+y print("voici le résultat de l'addition : "+str(z)) # Attention la variable x à été convertie automatiquement en variable réelle # La conversion "propre" s'obtient à l'aide des fonctions suivantes x_float=float(x) y_int=int(y) print('conversion en float : '+str(x_float)) print('conversion en int : '+str(y_int)) # la fonction type permet d'afficher le type de variable print(type(x)) print(type(x_float)) print(type(y)) print(type(y_int)) # Attention de mauvaises surprises peuvent subvenir quand on oublie le type de la variable # et que l'on mélange des variables de type différent (seulement en python 2) x=4/3 print('4/3 ='+str(x)) x=4/3.0 print('4/3.0 ='+str(x)) x=1.0*4/3 print('1.0*4/3 ='+str(x)) x=(1.0*4)/3 print('(1.0*4)/3 ='+str(x)) x=1.0*(4/3) print('1.0*(4/3) ='+str(x)) print(str(x)) print(int(x)) print(float(x)) # Une astuce rapide consiste en cas de doute à multiplier une variable entière ou réelle # par le nombre réel 1.0, ce qui rend en sortie une variable réelle de même valeur # Exposant et modulo print('Exposant : 4**2 = '+str(4**2)) print('Modulo : 4.4%2 = '+str(4.4%2)) print(int(4.4)+(4.4%2)) # des fonctions mathematiques import math x=2*math.pi x_sqrt=math.sqrt(x) e_exp_x=math.exp(x) cos_x=math.cos(x) print(x,x_sqrt,e_exp_x,cos_x) print('\n'+'-'*50+'\n') ####################### #### 4. conditions #### ####################### x=5 y='5' z=int(float(x)) x==y x==z x==y and x==z x==y or x==z condition=x==y if condition: print('yes') else: print('non') condition=x==z if condition: print('yes') else: print('non') x=5.5 y=5.55 z=5.45 print(x<y) print(y<z) print(x<y<z) print(z<x<y) print(x<y and y<z) print(x<y or y<z) print(x<=y) print(x<=x) print(x<x) print('\n'+'-'*50+'\n') ################################# #### 5. boucles for et while #### ################################# liste=[] print(liste) liste.append(5) liste.append(2.45) liste.append('un') liste.append('une') liste.append('des') print(liste) # un élément de la liste (la première position est l'indice 0) print(liste[0]) print(liste[2]) # la longeur de la liste est données par la fonction "len" print(len(liste)) # le dernier élément de la liste print(liste[len(liste)-1]) print(liste[-1]) # extraire plusieurs éléments de la liste print(liste[2:4]) print(liste[:4]) print(liste[2:]) print(liste[-3:]) print(liste[:-3]) print(liste[-3:-1]) # boucle "for" for i in range(3): print(liste[i]) for i in range(len(liste)): print(liste[i]) for element in liste: print(element) # boucle "while" compteur=0 while compteur<len(liste): print(liste[compteur]) compteur+=1 print('\n'+'-'*50+'\n') ############################## #### 6 functions creation #### ############################## def ma_fonction(): compteur_max=10 compteur=1 while compteur<compteur_max: if compteur%2==0: print(compteur) compteur+=1 ma_fonction() print('\n'+'-'*10+'\n') def ma_fonction_param(compteur_max=20,modulo=3): compteur=1 while compteur<compteur_max: if compteur%modulo==0: print(compteur) compteur+=1 ma_fonction_param() print('\n'+'-'*10+'\n') ma_fonction_param(40) print('\n'+'-'*10+'\n') ma_fonction_param(40,10) print('\n'+'-'*50+'\n') ################################ #### 6 read and write files #### ################################ # read nom_fichier='C:/Users/buntinx/Dropbox/DHBachelor2018/tutorial_python/Lexique381.txt' fichier=open(nom_fichier,'r') text=fichier.read() fichier.close() text=text.split('\n') for i in range(len(text)): text[i]=text[i].split('\t') text=text[:(len(text)-1)] for i in range(30,60): print(text[i][0]+' / '+text[i][3]) print('\n'+'-'*10+'\n') for i in range(60,30,-1): print(text[i][0]+' / '+text[i][3]) print('\n'+'-'*10+'\n') for i in range(59,29,-1): print(text[i][0]+' / '+text[i][3]) # write fichier=open('monlexique.txt', "w") for i in range(len(text)): fichier.write(text[i][0]+' / '+text[i][3]+'\n') fichier.close() def fct_write(name): fichier=open(name, "w") for i in range(100): if i%5==0: fichier.write(str(i)+'\n') fichier.close() def fct_read(name): fichier=open(name, 'r') text=fichier.read() fichier.close() text=text.split('\n') text=text[:(len(text)-1)] nombre=[] for i in range(len(text)): if i%2==0: nombre.append(int(text[i])) return nombre fct_write('exercice.txt') x=fct_read('exercice.txt') print(x) print('\n'+'-'*50+'\n') ############################################# #### 7. Graphiques matplotlib #### ############################################# import matplotlib as plt from matplotlib.pyplot import figure, show, plot from numpy import arange, sin, pi t=arange(0.0, 5.0, 0.01) plot(t,sin(2*pi*t)) show() fig=figure() ax1=fig.add_subplot(211) ax1.plot(t,sin(2*pi*t)) ax1.grid(True) ax1.set_ylim((-2, 2)) ax1.set_ylabel('1 Hz') ax1.set_title('A sine wave or two') for label in ax1.get_xticklabels(): label.set_color('r') ax2=fig.add_subplot(212) ax2.plot(t, sin(2*2*pi*t)) ax2.grid(True) ax2.set_ylim((-2, 2)) l=ax2.set_xlabel('Axis x') l.set_color('g') l.set_fontsize('large') show() ############################### #### 8. scrapping web data #### ############################### from urllib.request import urlopen from bs4 import BeautifulSoup response=urlopen("https://fr.wikipedia.org/wiki/Liste_des_capitales_du_monde") page_source=response.read() soup=BeautifulSoup(page_source,'html.parser') capitales_and_countries=[] for primitive in soup.findAll("table"): if primitive.find("th").string=='Capitale': for cap_and_count in primitive.findAll("td"): for text in cap_and_count.findAll("a"): if text.string != None: capitales_and_countries.append(text.string) for i in range(len(capitales_and_countries)): print(capitales_and_countries[i]) print('\n'+str(len(capitales_and_countries))+' capitales and countries listed\n') # exercice: Scrapper des prénoms sur # https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie response=urlopen("https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie") page_source=response.read() soup=BeautifulSoup(page_source,'html.parser') prenoms=[] for dlTag in soup.findAll('dl'): for ddTag in dlTag.findAll('dd'): bTag = ddTag.find('b') if bTag: aTag = bTag.find('a') if aTag: prenoms.append(aTag.string) for i in range(len(prenoms)): print(prenoms[i]) print('\n'+str(len(prenoms))+' first names listed\n') ################################## #### 9. Mediawiki bot example #### ################################## import requests from bs4 import BeautifulSoup user='testbot' passw='dhbot2017' baseurl='http://wikipast.epfl.ch/wikipast/' summary='Wikipastbot update' names=['Madame X','Monsieur Y'] # Login request payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} r1=requests.post(baseurl + 'api.php', data=payload) #login confirm login_token=r1.json()['query']['tokens']['logintoken'] payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) #get edit token2 params3='?format=json&action=query&meta=tokens&continue=' r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) edit_token=r3.json()['query']['tokens']['csrftoken'] edit_cookie=r2.cookies.copy() edit_cookie.update(r3.cookies) # 1. retrouver le contenu et l'imprimer for name in names: result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') soup=BeautifulSoup(result.text, "lxml") code='' for primitive in soup.findAll("text"): code+=primitive.string print(code) # 2. changer le contenu # écraser le contenu précédent: for name in names: content='==Contenu==\nVoici un contenu qui a écrasé le précédent\n' payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) print(r4.text) # rajouter du contenu: for name in names: #content='\n==Contenu rajouté==\nVoici du contenu rajouté\n' content='abcdef' payload={'action':'edit','assert':'user','format':'json','utf8':'','appendtext':content,'summary':summary,'title':name,'token':edit_token} r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) print(r4.text) # exercice: Faire un bot qui rajoute des commentaires sur les pages "Madame X" et "Monsieur Y" ou bien en change son contenu # exemple: remplacement de mots par d'autres, inversions de majuscules et minuscules, etc.... import requests from bs4 import BeautifulSoup user='testbot' passw='dhbot2017' baseurl='http://wikipast.epfl.ch/wikipast/' summary='Wikipastbot update' names=['Madame X','Monsieur Y'] # Login request payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} r1=requests.post(baseurl + 'api.php', data=payload) #login confirm login_token=r1.json()['query']['tokens']['logintoken'] payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) #get edit token2 params3='?format=json&action=query&meta=tokens&continue=' r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) edit_token=r3.json()['query']['tokens']['csrftoken'] edit_cookie=r2.cookies.copy() edit_cookie.update(r3.cookies) def minuscule(name): result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') soup=BeautifulSoup(result.text, "lxml") content='' for primitive in soup.findAll("text"): content+=primitive.string content=content.lower() payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) print(r4.text) def majuscule(name): result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') soup=BeautifulSoup(result.text, "lxml") content='' for primitive in soup.findAll("text"): content+=primitive.string content=content.upper() payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) print(r4.text) majuscule('Monsieur Y') minuscule('Monsieur Y') majuscule('Madame X')