\n",
""
],
"text/plain": [
""
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Afficher la table des matières\n",
"\n",
"from jyquickhelper import add_notebook_menu\n",
"add_notebook_menu()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"L’écriture et la lecture dans un fichier s’effectuent toujours de la même manière. On ouvre le fichier\n",
"en mode écriture ou lecture, on écrit ou on lit, puis on ferme le fichier, le laissant disponible pour une\n",
"utilisation ultérieure. Ce paragraphe ne présente pas l’écriture ou la lecture dans un format binaire\n",
"car celle-ci est peu utilisée dans ce langage."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dans cette partie, on prend l'exemple d'un fichier *SerieTV.txt* ayant le contenu suivant :\n",
"\n",
"walking dead\n",
"\n",
"Black Mirror \n",
"\n",
"Narcos\n",
"\n",
"Game of Thrones"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### Lecture dans un fichier texte"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"La lecture dans un fichier texte s’effectue selon le même schéma :"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"f = open('files/SerieTV.txt','r') #f = open(' nom_du_fichier.txt ','r')\n",
"lignes =f.readlines ()\n",
"f.close ()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Ouverture du fichier : open(nom,mode)\n",
" - nom : chaîne de caractère, nom du fichier\n",
" - mode : chaîne de caractères, accès au fichier\n",
" (’r’ : read, ’w’ : write, ’a’ : append)\n",
"* Lecture ligne par ligne ; La ligne est affectée à une variable texte\n",
"* Principales méthodes :\n",
" - read() Lit tout le fichier (jusqu’à EOF) et renvoie un str\n",
" - read(n) Lit n caractères du fichier à partir de la position courante\n",
" - readline() Lit une ligne du fichier jusqu’à nn et renvoie la chaîne\n",
" - readlines() Lit toutes les lignes du fichier, renvoie un objet list\n",
"* Fermeture du fichier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Méthodes seek() et tell()**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les méthodes **seek()** et **tell()** permettent respectivement de se déplacer au n ième caractère (plus exactement au n ième octet) d’un fichier et d’afficher où en est la lecture du fichier,\n",
"c’est-à-dire quel caractère (ou octet) est en train d’être lu."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f1 = open('files/SerieTV.txt', 'r')\n",
"f1.readline()\n",
"'walking dead\\n'\n",
"f1.tell()\n",
"14\n",
"f1.seek(0)\n",
"f1.tell()\n",
"0\n",
"f1.readline()\n",
"'walking dead\\n'\n",
"f1.readline()\n",
"'Black Mirror \\n'\n",
"f1.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On remarque qu'à l’ouverture d’un fichier, le tout premier caractère est indexé par 0 (tout comme le premier élément d’une liste). La méthode seek() permet facilement\n",
"de remonter au début du fichier lorsque l’on est arrivé à la fin ou lorsqu’on en a lu une partie."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Itérations directement sur le fichier**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il existe également un moyen à la fois simple et élégant\n",
"de parcourir un fichier."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Game of Thrones\n",
"\n",
"Breaking Bad\n",
"\n",
"The Walking Dead\n",
"\n",
"Dexter\n",
"\n",
"7Affiche Friends\n",
"\n",
"Friends\n",
"\n",
"House of Cards\n",
"\n",
"Lost, les disparus\n"
]
}
],
"source": [
"f1 = open('files/SerieTV.txt', 'r')\n",
"for ligne in f1:\n",
" print(ligne)\n",
" \n",
"\n",
"f1.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La boucle **for** va demander à Python d’aller lire le fichier ligne par ligne. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ecriture dans un fichier texte"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La syntaxe d'écriture dans un fichier est la suivante :"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open (\"nom-fichier.txt\", \"w\") # ouverture en mode écriture \"w\" ou écriture ajout \"a\"\n",
"s = \" Bonjour\"\n",
"s2 = \"Comment tu vas ?\"\n",
"f.write ( s ) # écriture de la chaîne de caractères s\n",
"f.write ( s2 ) # écriture de la chaîne de caractères s2\n",
"#...\n",
"f.close () # fermeture"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Certains codes sont très utiles lors de l’écriture de fichiers texte comme :\n",
"\n",
"-- **\\n** : passage à la ligne\n",
"\n",
"-- **\\t** : insertion d’une tabulation, indique un passage à la colonne suivante dans le logiciel Excel\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### Lecture et ecriture d'un fichier CSV"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import csv\n",
"def read_csv_file ( filename ):\n",
" \"\"\" Lire un fichier CSV et ecrire chaque ligne sous\n",
" forme de liste \"\"\"\n",
" f = open( filename)\n",
" for row in csv.reader (f):\n",
" print( row )\n",
" f. close()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import csv\n",
"def read_csv_file1 ( filename ):\n",
" \"\"\" Lire un fichier CSV et ajouter les elements a la liste . \"\"\"\n",
" f = open( filename )\n",
" data = []\n",
" for row in csv.reader (f):\n",
" data.append ( row )\n",
" print(data)\n",
" f.close()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def write_csv(filename):\n",
" import csv\n",
" L = [['Date', 'Nom', 'Notes'],\n",
" ['2016/1/18', 'Martin Luther King Day', 'Federal Holiday'],\n",
" ['2016/2/2','Groundhog Day', 'Observance'],\n",
" ['2016/2/8','Chinese New Year', 'Observance'],\n",
" ['2016/2/14','Valentine\\'s Day', 'Obervance'],\n",
" ['2016/5/8','Mother\\'s Day', 'Observance'],\n",
" ['2016/8/19','Statehood Day', 'Hawaii Holiday'],\n",
" ['2016/10/28','Nevada Day', 'Nevada Holiday']]\n",
" f = open(filename, 'w', newline='')\n",
" for item in L:\n",
" csv.writer(f).writerow(item)\n",
" f.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Méthode optimisée d’ouverture et de fermeture de fichier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Depuis la version 2.5, Python introduit le mot-clé **with** qui permet d’ouvrir et fermer un\n",
"fichier de manière commode. Si pour une raison ou une autre l’ouverture conduit à une erreur (problème de droits, etc), l’utilisation de **with** garantit la bonne fermeture du fichier (ce\n",
"qui n’est pas le cas avec l’utilisation de la méthode open() invoquée telle quelle). Voici un\n",
"exemple :"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Game of Thrones\n",
"\n",
"Breaking Bad\n",
"\n",
"The Walking Dead\n",
"\n",
"Dexter\n",
"\n",
"7Affiche Friends\n",
"\n",
"Friends\n",
"\n",
"House of Cards\n",
"\n",
"Lost, les disparus\n"
]
}
],
"source": [
"with open('files/SerieTV.txt', 'r') as f1:\n",
" for ligne in f1:\n",
" print(ligne)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vous remarquez que **with** introduit un bloc d’indentation. C’est à l’intérieur de ce bloc que\n",
"nous effectuons toutes les opérations sur le fichier. Une fois sorti, Python fermera automatiquement le fichier. Vous n’avez donc plus besoin d’invoquer la fonction close()."
]
}
],
"metadata": {
"anaconda-cloud": {},
"interpreter": {
"hash": "40d3a090f54c6569ab1632332b64b2c03c39dcf918b08424e98f38b5ae0af88f"
},
"kernelspec": {
"display_name": "Python [Root]",
"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.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 0
}