{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Sur la librairie glob**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import glob #glob est une librairie Python qui nous permettra de parcourir les fichiers de votre disque\n",
    "print(glob.glob(\"*\")) # affiche tout ce qui est présent au même endroit que notre fichier ipynb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Remarquez que ça affiche notre programme lui même !\n",
    "\n",
    "On a vu que l'on pouvait afficher le contenu d'un dossier en précisant son nom (par exemple `corpus/*`), on peut aussi afficher le contenu de tous les sous-dossiers :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(glob.glob(\"*/*\"))\n",
    "print(\"en plus lisible:\")\n",
    "for toto in glob.glob(\"*/*\"):\n",
    "    print(toto)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(\"On eput restreindre aux fichiers de type txt :\")\n",
    "for toto in glob.glob(\"*/*.txt\"):\n",
    "    print(toto)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Sur l'ouverture de fichiers**\n",
    "\n",
    "Nous allons voir une syntaxe plus économe pour l'ouverture du fichier, en en profiter pour voir un nouveau mot-clé Python `break`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for toto in glob.glob(\"*/*.txt\"):\n",
    "    #Syntaxe 1 :\n",
    "    f = open(\"corpus/pg13846.txt\", \"r\", encoding = \"utf-8\")\n",
    "    chaine = f.read()# La méthode read ouvre sous forme de chaîne de caractères\n",
    "    f.close()#on ferme le fichier\n",
    "    \n",
    "    #Syntaxe 2 (le fichier est fermé \"implicitement\") :\n",
    "    with open(\"corpus/pg13846.txt\", \"r\", encoding = \"utf-8\") as f:\n",
    "        chaine = f.read()\n",
    "    break #permet de sortir de la boucle sans faire tout les tours !"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`break` peut être aussi une autre façon de travailler sur des échantillons !"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Afficher un échantillon avec break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "liste_mots = chaine.split()\n",
    "compteur = 0\n",
    "for mot in liste_mots:\n",
    "    compteur +=1\n",
    "    print(mot)\n",
    "    if compteur>10:\n",
    "        print(\"**On a bien les 10 premiers mots !**\")\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Syntaxe plus courte pour remplir un dictionnaire**\n",
    "\n",
    "Méthode 1: 7 lignes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dic_longueurs = {}\n",
    "for mot in liste_mots[1:20]: #on prend les mots 1 à 20 (arbitraire)\n",
    "  longueur = len(mot)#la longueur du mot\n",
    "  if longueur not in dic_longueurs: #on a jamais vu cette longueur de mot\n",
    "    dic_longueurs[longueur]=1 #\n",
    "  else: #on a vu cette longueur de mot\n",
    "    dic_longueurs[longueur]+=1\n",
    "print(dic_longueurs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Méthode 2, on optimise l'agorithme :\n",
    "\n",
    "- Si je n'ai pas vu le mot, je crée une clé et je la mets à zéro\n",
    "- Et de toutes façons j'ajoute 1\n",
    "\n",
    "Economise encore une ligne, on passe à 6 :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dic_longueurs = {}\n",
    "for mot in liste_mots[1:20]: #on prend les mots 1 à 20 (arbitraire)\n",
    "  longueur = len(mot)#la longueur du mot\n",
    "  if longueur not in dic_longueurs: #on a jamais vu cette longueur de mot\n",
    "    dic_longueurs[longueur]=0\n",
    "  dic_longueurs[longueur]+=1#n'est plus dans le else\n",
    "print(dic_longueurs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Et encore une ligne de moins en ne créant pas de variable longueur mais en utilisant directement len(mot) comme clé :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dic_longueurs = {}\n",
    "for mot in liste_mots[1:20]: #on prend les mots 1 à 20 (arbitraire)\n",
    "  if len(mot) not in dic_longueurs: #on a jamais vu cette longueur de mot\n",
    "    dic_longueurs[len(mot)]=0  \n",
    "  dic_longueurs[len(mot)]+=1\n",
    "print(dic_longueurs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
