{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 1A.2 - Modules, fichiers, expressions r\u00e9guli\u00e8res (correction)\n", "\n", "Correction."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 1 : Excel $\\rightarrow$ Python $\\rightarrow$ Excel\n", " \n", "Il faut t\u00e9l\u00e9charger le fichier [seance4_excel.xlsx](http://www.xavierdupre.fr/enseignement/complements/seance4_excel.xlsx) puis l'enregistrer au formet **texte (s\u00e9parateur : tabulation) (*.txt)**. On rappelle les \u00e9tapes de l'exercice :\n", "\n", "- enregistrer le fichier au format texte,\n", "- le lire sous python\n", "- cr\u00e9er une matrice carr\u00e9e 3x3 o\u00f9 chaque valeur est dans sa case (X,Y),\n", "- enregistrer le r\u00e9sultat sous format texte,\n", "- le r\u00e9cup\u00e9rer sous Excel. "]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["with open (\"seance4_excel.txt\", \"r\") as f :\n", " mat = [ row.strip(' \\n').split('\\t') for row in f.readlines() ]\n", " \n", "mat = mat [1:]\n", "res = [ [ None ] * 3 for i in range(5) ] \n", "for i,j,v in mat :\n", " res [ int(j)-1 ] [ int (i)-1 ] = float(v)\n", "\n", "with open (\"seance4_excel_mat.txt\", \"w\") as f :\n", " f.write ( '\\n'.join ( [ '\\t'.join( [ str(x) for x in row ] ) for row in res ] ) ) "]}, {"cell_type": "markdown", "metadata": {}, "source": ["Il est tr\u00e8s rare d'\u00e9crire ce genre de code. En r\u00e8gle g\u00e9n\u00e9rale, on se sert de modules d\u00e9j\u00e0 existant comme [pandas](http://pandas.pydata.org/), [xlrd](http://www.python-excel.org/) et [openpyxl](http://pythonhosted.org/openpyxl/). Cela \u00e9vite la conversion au format texte :"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Y12345
X
10.0-1.0-2.0-3.0-4.0
21.00.0-1.0-2.0-3.0
32.01.00.0-1.0NaN
\n", "
"], "text/plain": ["Y 1 2 3 4 5\n", "X \n", "1 0.0 -1.0 -2.0 -3.0 -4.0\n", "2 1.0 0.0 -1.0 -2.0 -3.0\n", "3 2.0 1.0 0.0 -1.0 NaN"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "df = pandas.read_excel(\"seance4_excel.xlsx\", sheet_name=\"Feuil1\", engine='openpyxl')\n", "mat = df.pivot(\"X\", \"Y\", \"value\")\n", "mat.to_excel(\"seance4_excel_mat.xlsx\")\n", "mat"]}, {"cell_type": "markdown", "metadata": {}, "source": ["C'est un peu plus rapide."]}, {"cell_type": "markdown", "metadata": {}, "source": ["

Exercice 2 : trouver un module (1)

\n", "\n", "Le module [random](https://docs.python.org/3.4/library/random.html) est celui qu'on cherche."]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[0.05212398752415104, 0.3625933266002588, 0.5086131881658928, 0.3680173918789995, 0.32259523700428805, 0.8492977259049382, 0.10651804849554158, 0.3081056247913172, 0.576305746619826, 0.11144472440808084]\n", "[0.576305746619826, 0.8492977259049382, 0.32259523700428805, 0.10651804849554158, 0.3081056247913172, 0.5086131881658928, 0.11144472440808084, 0.05212398752415104, 0.3625933266002588, 0.3680173918789995]\n"]}], "source": ["import random\n", "alea = [ random.random() for i in range(10) ]\n", "print (alea)\n", "random.shuffle(alea)\n", "print (alea)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 3 : trouver un module (2)\n", "\n", "Le module [datetime](https://docs.python.org/3.4/library/datetime.html) permet de faire des op\u00e9rations sur les dates."]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["39 days, 0:00:00\n", "0\n"]}], "source": ["from datetime import datetime\n", "date1 = datetime(2013,9,9)\n", "date0 = datetime(2013,8,1)\n", "print (date1 - date0)\n", "birth = datetime (1975,8,11)\n", "print (birth.weekday()) # lundi"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 4 : son propre module\n", "\n", "On effectue le remplacement ``if __name__ == \"__main__\":`` par ``if True :`` :"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": ["# fichier monmodule2.py\n", "import math\n", "\n", "def fonction_cos_sequence(seq) :\n", " return [ math.cos(x) for x in seq ]\n", "\n", "if __name__ == \"__main__\" :\n", " # et une petite astuce quand on travaille sous notebook\n", " code = \"\"\"\n", " # -*- coding: utf-8 -*-\n", " import math\n", " def fonction_cos_sequence(seq) :\n", " return [ math.cos(x) for x in seq ] \n", " if True :\n", " print (\"Ce message n'appara\u00eet que si ce programme est le point d'entr\u00e9e.\")\n", " \"\"\".replace(\" \",\"\")\n", " with open(\"monmodule3.py\", \"w\", encoding=\"utf8\") as f : f.write(code)"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Ce message n'appara\u00eet que si ce programme est le point d'entr\u00e9e.\n", "[0.5403023058681398, -0.4161468365471424, -0.9899924966004454]\n"]}], "source": ["import monmodule3\n", "print ( monmodule3.fonction_cos_sequence ( [ 1, 2, 3 ] ) )"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le message ``ce message n'appara\u00eet que ce programme est le point d'entr\u00e9e`` appara\u00eet maintenant alors qu'il n'apparaissait pas avec la version de l'\u00e9nonc\u00e9. Comme il appara\u00eet apr\u00e8s ``*``, cela montre que cette ligne est ex\u00e9cut\u00e9e si le module est import\u00e9."]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": ["import monmodule3"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Si on importe le module une seconde fois, le message n'appara\u00eet plus : le langage Python a d\u00e9tect\u00e9 que le module avait d\u00e9j\u00e0 \u00e9t\u00e9 import\u00e9. Il ne le fait pas une seconde fois."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 5 : chercher un motif dans un texte\n", "\n", "L'expression r\u00e9guli\u00e8re est ``je .{1,60}``. Le symbol ``.`` signifie n'importe quel caract\u00e8re. Suivi de ``{1,60}`` veut dire n'importe quel caract\u00e8re r\u00e9p\u00e9t\u00e9 entre 1 et 60 fois."]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["---- VOEUX01.txt\n", "je pense aussi \u00e0 nos compatriotes de Toulouse, mais \u00e9galement d\n", "je veux dire, en ce 31 d\u00e9cembre, la solidarit\u00e9 et l'amiti\u00e9 de l\n", "je sais que vous voulez faire vivre les valeurs qui sont celles\n", "je souhaite une bonne et heureuse ann\u00e9e.\n", "---- VOEUX05.txt\n", "je pense d'abord \u00e0 toutes celles et \u00e0 tous ceux qui connaissent\n", "Je pense aussi \u00e0 nos soldats qui sont engag\u00e9s sur tous les cont\n", "je veux dire \u00e0 la famille de Bernard PLANCHE, que les pouvoirs \n", "je prendrai rapidement des initiatives pour relancer la constru\n", "---- VOEUX06.txt\n", "je pense d'abord \u00e0 toutes celles et \u00e0 tous ceux qui sont victim\n", "Je veux aussi saluer avec respect et reconnaissance nos soldats\n", "je me bats pour qu'elle prenne toute sa place dans ce nouveau m\n", "Je me bats pour que chaque Fran\u00e7ais, pour que chaque jeune en p\n", "je voudrais que les choses avancent plus vite, et qu'elles avan\n", "je m'y engagerai pleinement. Je voudrais vous dire ce soir quel\n", "Je sais les souffrances et les difficult\u00e9s auxquelles certains \n", "Je connais vos attentes pour ce qui concerne les salaires et le\n", "je demande au Gouvernement d'avancer sur ce point dans les tout\n", "---- VOEUX07.txt\n", "je m'adresse \u00e0 vous.\n", "Je pense \u00e0 vous qui vous pr\u00e9parez \u00e0 f\u00eater la nouvelle ann\u00e9e ave\n", "Je pense \u00e0 vous qui \u00eates oblig\u00e9s de travailler cette nuit au se\n", "Je pense aussi \u00e0 vous qui \u00eates seuls et pour qui cette soir\u00e9e s\n", "Je pense \u00e0 vous, que la vie a \u00e9prouv\u00e9s, et que la tristesse ou \n", "je veux adresser un message d'esp\u00e9rance, un message de foi dans\n", "Je voudrais convaincre m\u00eame celui qui en doute qu'il n'y a pas \n", "Je sais combien est grande votre attente d'un changement profon\n", "Je sais les craintes que beaucoup d'entre vous \u00e9prouvent pour l\n", "Je sais l'angoisse qui vous \u00e9treint quand vous avez peur de per\n", "Je sais votre exasp\u00e9ration quand vous voulez entreprendre ou qu\n", "je le ferai. Je le ferai tout simplement parce que c'est l'int\u00e9\n", "je vous avais faite de vous rendre la fiert\u00e9 d'\u00eatre Fran\u00e7ais, d\n", "je veux dire que j'ai fait tout ce que je pensais possible de f\n", "Je ne crois pas \u00e0 la brutalit\u00e9 comme m\u00e9thode de gouvernement. J\n", "je me suis efforc\u00e9 dans le respect de tous.\n", "je veux dire qu'il ne faut pas perdre de vue que notre pays a t\n", "je n'ai agi qu'avec le souci de d\u00e9fendre les int\u00e9r\u00eats de la Fra\n", "je ne me sois r\u00e9p\u00e9t\u00e9 l'engagement que j'ai pris envers chacun d\n", "Je ne vous tromperai pas, je ne vous trahirai pas \u00bb. Je vous do\n", "Je vous la dirai toujours. Je ne m'autoriserai aucune hypocrisi\n", "je l'ai faite avec des hommes et des femmes de valeur. Je ne le\n", "Je leur ai simplement propos\u00e9 de servir leur pays. Ils l'ont ac\n", "Je leur en suis reconnaissant.\n", "je n'ai jamais cess\u00e9 de penser qu'elle \u00e9tait indispensable. Urg\n", "Je souhaite du fond du coeur qu'elle soit pour la France, pour \n", "---- VOEUX08.txt\n", "je veux penser d'abord \u00e0 ceux que la vie a durement \u00e9prouv\u00e9s, \u00e0\n", "Je veux penser \u00e0 nos soldats qui en ce moment m\u00eame risquent leu\n", "Je veux penser \u00e0 leurs familles qui vivent douloureusement cett\n", "je mesure la responsabilit\u00e9 qui est la mienne. Cette responsabi\n", "je l'assumerai pour que tous ceux qui en ont besoin soient prot\n", "je vous ai toujours dit la v\u00e9rit\u00e9 et j'ai agi. C'\u00e9tait mon devo\n", "je reste persuad\u00e9 que le monde a besoin d'une Europe forte, ind\n", "Je suis plus d\u00e9cid\u00e9 que jamais \u00e0 y faire face, avec le souci de\n", "Je ne laisserai pas les plus fragiles se d\u00e9battre seuls dans le\n", "Je pense aussi \u00e0 la r\u00e9forme du lyc\u00e9e qui est n\u00e9cessaire pour \u00e9v\n", "Je pense enfin \u00e0 la r\u00e9forme de notre proc\u00e9dure p\u00e9nale si import\n", "je les m\u00e8nerai avec le Premier ministre Fran\u00e7ois Fillon et le g\n", "je me rendrai d\u00e8s lundi parce que c'est la vocation de la Franc\n", "je veux le relever avec vous. Vous pouvez compter sur moi.\n", "je pr\u00e9sente \u00e0 chacun d'entre vous mes meilleurs voeux pour 2009\n", "---- VOEUX09.txt\n", "Je pense en particulier \u00e0 ceux qui ont perdu leur emploi. Cepen\n", "Je veux rendre hommage ce soir au sang-froid et au courage des \n", "Je veux rendre un hommage particulier aux partenaires sociaux q\n", "je ne suis pas un homme qui renonce \u00e0 la premi\u00e8re difficult\u00e9, e\n", "Je sais qu'elles ont boulevers\u00e9 des habitudes et qu'avant de pr\n", "Je le conduirai avec le Premier Ministre et le Gouvernement dan\n", "je forme pour notre pays.\n", "je veux dire ma d\u00e9termination \u00e0 ce que la R\u00e9publique tienne \u00e0 l\n", "je veux dire ce soir qu'ils ne seront pas abandonn\u00e9s. Face \u00e0 l'\n", "je souhaite que 2010 soit l'ann\u00e9e o\u00f9 nous redonnerons un sens a\n", "---- VOEUX74.txt\n", "JE VAIS VOUS PARLER, JE NE VOUDRAIS NI VOUS ENNUYER, NI VOUS AT\n", "JE VOUS AI DEJA DECRITES ET DONT J'AURAI L'OCCASION DE VOUS PAR\n", "JE VOUDRAIS QUE MES VOEUX SOIENT VRAIMENT DES VOEUX, LES VOEUX \n", "JE SOUHAITE, AU NOM DE LA FRANCE, QUE LA SOCIETE FRANCAISE VOUS\n", "JE SOUHAITE QUE 1975 SOIT L'ANNEE DE LA FRATERNITE, C'EST-A-DIR\n", "JE PENSE AUX AGRICULTEURS, JE PENSE AUX ARTISANS, DONT LES COND\n", "JE PENSE A CERTAINES PETITES ENTREPRISES - DEVRONT ETRE EXAMINE\n", "JE SOUHAITE DONC QUE 1975 SOIT L'ANNEE DE LA FRATERNITE ET QU'A\n", "JE SOUHAITE QUE LA FRANCE, EN 1975, CONTINUE DE JOUER CE ROLE, \n", "JE LUI SOUHAITE, DANS LE MONDE TOURMENTE OU NOUS VIVONS, D'APPA\n", "JE VOUDRAIS LES ADRESSER A CERTAINES CATEGORIES DE FRANCAIS ET,\n", "JE NE SAIS PAS SI VOUS AVEZ PU LE VOIR, ILS M'ONT RECU AVEC LEU\n", "JE SUIS RENTRE DES ANTILLES, MES MAINS ETAIENT COUVERTES DES EC\n", "JE LEUR SOUHAITE, A EUX, A NOS AUTRES COMPATRIOTES DES DEPARTEM\n", "JE PENSE AUSSI AUX FRANCAIS INSTALLES A_L_ETRANGER QUI FONT PAR\n", "JE VOUDRAIS EN VOTRE NOM M'ADRESSER CE SOIR AUX PLUS MALHEUREUX\n", "JE VEUX DIRE D'ABORD LES VICTIMES DES ACCIDENTS CRUELS, ET NOTA\n", "JE PENSE AUSSI AUX FRANCAIS QUI SONT CE SOIR DANS LES HOPITAUX,\n", "JE VOUDRAIS EGALEMENT ADRESSER NOTRE SALUT AUX TRAVAILLEURS IMM\n", "JE VOUDRAIS ENFIN, PENSANT A LA FRANCE A LA FOIS CHRETIENNE ET \n", "JE SOUHAITE QUE TU SOIES UNE ANNEE ACCUEILLANTE POUR LES FRANCA\n", "---- VOEUX75.txt\n", "JE VOUDRAIS, CE SOIR, PRESIDENT DE TOUS LES FRANCAIS, QUE MES V\n", "JE SOUHAITE QUE L'ANNEE 1976 CONTRIBUE AU RAYONNEMENT DE LA FRA\n", "JE RAYONNEMENT ET NE DIS-JE PAS GRANDEUR ? PARCE QUE LA GRANDEU\n", "JE LE SOUHAITE POUR ELLE ET POUR LE MONDE\n", "JE SOUHAITE QUE CE SOIT A VOTRE AVANTAGE, AFIN QUE VOUS VIVIEZ \n", "JE SUIS SUR QUE CELA NE LUI REND PAS SERVICE. JE NE CROIS PAS Q\n", "JE SOUHAITE L'ENTENTE ET L'UNITE DES FRANCAIS. CE NE SERAIT REN\n", "JE SOUHAITE, AU NOM DE LA FRANCE UNE BONNE ET HEUREUSE ANNEE 19\n", "JE CROIS QU'ANNE AYMONE VEUT AUSSI VOUS ADRESSER SES VOEUX\n", "---- VOEUX79.txt\n", "JE VOUS ADRESSE LES SOUHAITS QUE LES FRANCAIS ECHANGENT ENTRE E\n", "JE SUIS CONDUIT A PENSER TOUS LES JOURS A LA FRANCE DANS LE MON\n", "JE SOUHAITE QU'EN 1979, LA FRANCE FASSE RAYONNER SON MESSAGE DE\n", "JE REVIENS D'AFRIQUE. DANS TROIS JOURS, J'ACCUEILLERAI EN TERRE\n", "JE ME RENDRAI EN UNION SOVIETIQUE 'URSS'. PENDANT LES SIX PROCH\n", "JE M'EFFORCE D'AFFIRMER L'IMAGE DE LA FRANCE, CELLE D'UN PAYS O\n", "JE SOUHAITE QU'EN 1979 NOUS NOUS ORGANISIONS POUR PREPARER L'AV\n", "JE TIENS A LE DIRE, DES UNS ET DES AUTRES. C'EST NOTRE BIEN LE \n", "---- VOEUX83.txt\n", "je souhaite que l'an nouveau donne des raisons d'esp\u00e9rer.\n", "je ne promets rien d'autre \u00e0 personne que la poursuite, sans fa\n", "je soutiendrai demain qu'il devait y avoir \u00e9quilibre des forces\n", "je ne me lasserai jamais d'esp\u00e9rer - ni de vouloir - que les Fr\n", "---- VOEUX87.txt\n", "je vous y invite chaque fois, pour ceux qui seront seuls, \u00e2g\u00e9s,\n", "je crois, que d'exprimer au nom de tous la fraternit\u00e9 qui nous \n", "Je forme des voeux, simplement, pour qu'on s'y aime un peu plus\n", "Je d\u00e9sire, pr\u00e9cis\u00e9ment, r\u00e9fl\u00e9chir avec vous \u00e0 trois des rendez-\n", "Je souhaite ardemment qu'ils se reprennent et que la France, un\n", "je veux dire l'\u00e9lection pr\u00e9sidentielle.\n", "Je n'\u00e9tablirai pas ici la liste de ces choix. Les candidats s'e\n", "---- VOEUX89.txt\n", "Je suis persuad\u00e9 qu'elle a, par sa seule existence, puissamment\n", "je compte voir na\u00eetre dans les ann\u00e9es 90 une conf\u00e9d\u00e9ration euro\n", "je me disais que nous avions de la chance, nous Fran\u00e7ais, de vi\n", "je pensais aussi qu'il nous fallait en \u00eatre dignes. Les peuples\n", "Je forme des voeux pour que la France \u00e9chappe aux entra\u00eenements\n", "Je forme des voeux, et le gouvernement y travaille, pour que la\n", "Je forme des voeux pour que de grands chantiers tels que le log\n", "Je souhaite de toutes mes forces que la France offre \u00e0 ceux qui\n", "---- VOEUX90.txt\n", "je ne veux pas que cela recommence.\n", "je crois encore aux chances de la paix et la France y travaille\n", "Je l'ai dit \u00e0 la tribune des Nations unies, le 24 septembre der\n", "Je souhaite qu'il s'organise dans le cadre d'une ou plusieurs c\n", "Je me souviens de vous avoir d\u00e9clar\u00e9 lors des premiers voeux qu\n", "je vous adressais, le 31 d\u00e9cembre 1981 : \"Tout ce qui permettra\n", "Je suis frapp\u00e9 du d\u00e9calage qui existe entre la r\u00e9alit\u00e9 de notre\n", "Je sais ce qui ne va pas chez nous. Je sais aussi ce qui va bie\n", "je n'ignore pas que nous avons besoin de bien d'autres choses e\n", "---- VOEUX94.txt\n", "je dois redire l'admiration que m'inspire l'extraordinaire coup\n", "Je pense, en particulier, \u00e0 l'\u00e9quipage d'Air-France dont le san\n", "je trouve dans ces faits un v\u00e9ritable r\u00e9confort. Il est bon de \n", "Je constate seulement que les efforts accomplis par les uns et \n", "je m'adresse \u00e0 vous pour des voeux de nouvelle ann\u00e9e en ma qual\n", "je me permettrai deux recommandations : la premi\u00e8re : ne dissoc\n", "Je vous le dis avec la m\u00eame passion que nagu\u00e8re. N'en doutez pa\n", "Je n'apprendrai rien \u00e0 personne en rappelant que dans quatre mo\n", "Je souhaite vivement que ce soit l'occasion d'un vrai, d'un gra\n", "je serai, je l'\u00e9couterai le coeur plein de reconnaissance pour \n", "Je crois aux forces de l'esprit et je ne vous quitterai pas. Je\n"]}], "source": ["import pyensae.datasource, re\n", "discours = pyensae.datasource.download_data('voeux.zip', website = 'xd')\n", "\n", "exp = re.compile (\"je .{1,60}\", re.IGNORECASE)\n", "for fichier in discours :\n", " print(\"----\",fichier)\n", " try:\n", " with open(fichier,\"r\") as f : text = f.read()\n", " except:\n", " with open(fichier,\"r\", encoding=\"latin-1\") as f : text = f.read()\n", " je = exp.findall(text) \n", " for t in je :\n", " print (t)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 6 : chercher un autre motif dans un texte\n", "\n", "Pour les mots _securite_ ou _insecurite_, on construit l'expression :"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["---- VOEUX01.txt\n", "(\"enac\u00e9e quand l'ins\u00e9curit\u00e9 progresse, quand l'exercice des libert\u00e9s, la qual\", 'in')\n", "---- VOEUX05.txt\n", "---- VOEUX06.txt\n", "(\"traites, notre s\u00e9curit\u00e9 sociale se r\u00e9forment et c'est la garantie de leur\", '')\n", "(\"rvice, pour la s\u00e9curit\u00e9, pour l'emploi, pour le pouvoir d'achat et que ce\", '')\n", "(\" l'\u00e9nergie, la s\u00e9curit\u00e9, l'immigration. N'oublions jamais que l'Europe, c\", '')\n", "---- VOEUX07.txt\n", "---- VOEUX08.txt\n", "('vie pour notre s\u00e9curit\u00e9 et pour la paix. Je veux penser \u00e0 leurs familles ', '')\n", "---- VOEUX09.txt\n", "('garantir notre s\u00e9curit\u00e9.', '')\n", "---- VOEUX74.txt\n", "---- VOEUX75.txt\n", "---- VOEUX79.txt\n", "---- VOEUX83.txt\n", "(\"tres : plus de s\u00e9curit\u00e9, des banlieues r\u00e9nov\u00e9es et plus d'enfants dans no\", '')\n", "---- VOEUX87.txt\n", "---- VOEUX89.txt\n", "(' de paix et de s\u00e9curit\u00e9.', '')\n", "---- VOEUX90.txt\n", "(' du Conseil de s\u00e9curit\u00e9, organe supr\u00eame des Nations unies. A ce titre, no', '')\n", "(' du Conseil de s\u00e9curit\u00e9, y compris le recours \u00e9ventuel \u00e0 la force. Voil\u00e0 ', '')\n", "(\" d'Isra\u00ebl \u00e0 la s\u00e9curit\u00e9, ni le droit des Palestiniens \u00e0 poss\u00e9der une patr\", '')\n", "---- VOEUX94.txt\n"]}], "source": ["import pyensae.datasource, re\n", "discours = pyensae.datasource.download_data('voeux.zip', website = 'xd')\n", "\n", "exp = re.compile (\"(.{1,15}(in)?s\u00e9curit\u00e9.{1,50})\", re.IGNORECASE)\n", "for fichier in discours :\n", " print(\"----\",fichier)\n", " try:\n", " with open(fichier,\"r\") as f : text = f.read()\n", " except:\n", " with open(fichier,\"r\", encoding=\"latin-1\") as f : text = f.read()\n", " je = exp.findall(text) \n", " for t in je :\n", " print (t)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Exercice 7 : recherche les urls dans une page wikip\u00e9dia\n", "\n", "On pourra prendre comme exemple la page du programme [Python](https://fr.wikipedia.org/wiki/Python_(langage)). La premi\u00e8re partie consiste \u00e0 r\u00e9cup\u00e9rer le contenu d'une page HTML."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["b'\\n\\n\\n\\nPython (langage) \\xe2\\x80\\x94 Wikip\\xc3\\xa9dia\\n