Cours n 9. Programmation avec Python - Automne 2015 Bruno Martin & Jean-Paul Roy L1-Sciences. http://deptinfo.unice.fr/~roy.



Documents pareils
1 Lecture de fichiers

Python Les fondamentaux du langage

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

Introduction à l informatique en BCPST

Cours de Système : Gestion de Fichiers

SYSTÈME DE GESTION DE FICHIERS

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Cours 14 Les fichiers

Le poste de travail, les dossiers et les fichiers

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Permis de conduire info

GUIDE DE L UTILISATEUR Recoveo Récupérateur de données

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Récupérer un fichier effacé par erreur avec le logiciel Restoration

Gestion d utilisateurs et stratégie systèmes.

La mémoire. Un ordinateur. L'octet. Le bit

Petit guide à l'usage des profs pour la rédaction de pages pour le site Drupal du département

Tutoriel Création d une source Cydia et compilation des packages sous Linux

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Environnement Informatique EMSE Linux

Le Network File System de Sun (NFS)

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

Les structures de données. Rajae El Ouazzani

Initiation à la Programmation en Logique avec SISCtus Prolog

Licence Sciences et Technologies Examen janvier 2010

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

Fiche Pratique. MAJ le 10/04/2013

Affectation standard Affectation modifiée (exemple)

Administration Linux - FTP

Gestion d Active Directory à distance : MMC & Délégation

Utiliser ma messagerie GMAIL

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

(Langage de commandes) Les commandes sont données par l'utilisateur grâce au clavier, à partir d'une "invite" ou "prompt" (par exemple "c:\>" )

Sécurité Informatique

Module : Informatique Générale 1. Les commandes MS-DOS

TP 1 : prise en main de Windows. TP 1 : prise en main de Windows

Quick Start Installation de MDweb version 2.3

Réseaux Active Directory

TP3 : Manipulation et implantation de systèmes de fichiers 1

Plan du cours. Historique du langage Nouveautés de Java 7

Septembre 2012 Document rédigé avec epsilonwriter

CS 01 D/B2I/ CONSULTATION ET TRANSMISSION DE L INFORMA-

Programmation C. Apprendre à développer des programmes simples dans le langage C

Sauvegarde des données au LAAS

Programmation système de commandes en C

GESTION DE L'ORDINATEUR

NE PAS INSERER DE CD FAIT POUR WINDOWS LORS DE L'INSTALLATION D'INTERNET NE PAS INSERER LE CD D'INSTALLATION DE VOTRE FOURNISSEUR D'ACCES

Aperçu rapide de PC BSD 1.2.

Exonet : sauvegarde automatisée d une base de données

Partie 1. Professeur : Haouati Abdelali. CPGE Lycée Omar Ibn Lkhattab - Meknès haouaticpge@gmail.com

Système de Gestion de Fichiers

pyensae StockPrices September 1, Manipulation de séries financières avec la classe StockPrices

C.M. 1 & 2 : Prise en main de Linux

1 Recherche en table par balayage

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

LES SYSTÈMES DE FICHIERS

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Journée Josy/PLUME. Outils logiciels libres utiles à tout ASR SAMBA. Maurice Libes. Centre d'océanologie de Marseille UMS 2196 CNRS

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.

Informatique. Les réponses doivent être données en cochant les cases sur la dernière feuille du sujet, intitulée feuille de réponse

TP 1 Prise en main de l environnement Unix

A.-M. Cubat PMB - Import de notices à partir d un tableur Page 1 Source :

Comment faire des étiquettes d adresse avec LIBREOFFICE, à partir d un fichier EXEL ou CALC

Le publipostage avec Open Office

Service Systèmes et Réseaux

1 Démarrage de Marionnet

3IS - Système d'exploitation linux - Programmation système

Comment configurer Kubuntu

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

TP Codage numérique des caractères. Un ordinateur ne manipule que des 0 et des 1 : Comment alors code-t-il du texte?

OPTENET DCAgent Manuel d'utilisateur

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

Explications des items d'obii pour la validation du B2I

L informatique en BCPST

Programmation système I Les entrées/sorties

LA SAUVEGARDE DES DONNEES SUR LES ORDINATEURS PERSONNELS

But de cette présentation. Contrôleur de domaine avec Samba (rédigé pour Ubuntu Server) Introduction. Samba: principes

Sauvegarde et Restauration d un environnement SAS

l'ordinateur les bases

Bon ben voilà c est fait!

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Gestion du parc informatique des collèges du département du Cher. Manuel d utilisation de la solution de gestion de Parc

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

LINUX REMPLAÇANT WINDOWS NT

Seniors/Niveau 2. Connaissances préalables requises. Pour accéder au niveau 2, il faut être capable de:

Plan. Le système de transfert de fichiers d'internet. Introduction aux systèmes de transfert de fichiers Le protocole FTP.

Fiche technique Mailpro

Module d anonymisation

cbox VOS FICHIERS DEVIENNENT MOBILES! POUR CLIENT MAC OS X MANUEL D UTILISATION

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP : Gestion d une image au format PGM

Atelier Découverte de Windows. janvier 2012

Systeme d'exploitation

Chapitre 02. Configuration et Installation

TP1 - Prise en main de l environnement Unix.

Chapitre I Notions de base et outils de travail

Transcription:

Programmation avec Python - Automne 2015 Bruno Martin & Jean-Paul Roy L1-Sciences Cours n 9 http://deptinfo.unice.fr/~roy Les fichiers 1

Utilité des fichiers Le mot fichier provient du terme de fiche : «feuille de carton sur laquelle on écrit soit les titres des ouvrages que l on veut cataloguer, soit les renseignements sur une personne ou un fait que l on veut garder et retrouver facilement» Le fichier désignait le recueil des fiches ou le meuble qui contient les fiches. Les systèmes d exploitation (Linux, MacOS-X, Windows) permettent de stocker de grandes quantités d informations, de les rechercher et de les classer sur disques durs (situés où?) dans des fichiers un peu comme les fiches cartonnées. Système d'exploitation : Operating system (OS). La référence pour un informaticien est UNIX (Linux, MacOS-X). 2

Il y a deux systèmes de fichiers possibles Il y a essentiellement deux déclinaisons de systèmes de fichiers (filesystems) : Unix (Linux, MacOS-X) et Windows. Avec quelques légères différences entre Linux (Unix System V) et MacOS-X (Unix BSD). Les fichiers (files) sont regroupés dans une arborescence (tree) ayant une ou plusieurs racines (roots), dont les noeuds sont les répertoires (directories) et les feuilles sont les fichiers (files). Un répertoire contient des répertoires et des fichiers. Sur Unix, une seule racine nommée / Sur Windows, plusieurs racines nommées A:\, B:\, C:\, etc. En général C:\ représente le disque principal. 3

UNIX (Linux) WINDOWS / C:\ tmp/ users/ usr/ bin/ Users\ Windows\ bm hpastor/ Admin\ hpastor\ tp1.py photos/ Documents\ coq.png zebre.jpg tp1.py Un répertoire ou un fichier est relié à la racine par un chemin unique. /users/hpastor/ /users/hpastor/photos/coq.png 4

Chemins relatifs et absolus Les chemins absolus spécifient l'emplacement exact d'un répertoire ou fichier à l'intérieur d'une arborescence, à partir de la racine. (Linux) (MacOS-X) (Windows) /users/hpastor/photos/coq.png /Volumes/cleUSB/Python/tp1.py c:\users\hpastor\documents\tp1.py Les chemins relatifs spécifient l'emplacement d'un répertoire ou fichier à partir d'un certain répertoire de l'arborescence (implicite, non indiqué dans le chemin lui-même). Ex : photos/coq.png est un chemin relatif à /users/hpastor/ Le répertoire père se note.. Ex :../../bm si je suis dans le répertoire photos 5

Le répertoire courant et le module os Il est important de savoir dans quel répertoire on est en train de travailler, afin d'accéder aux fichiers par des chemins relatifs. Ce répertoire de travail est le répertoire courant (current directory). Le module os de Python permet de manipuler le système de fichiers sans sortir de Python import os (au toplevel ou dans une fonction). Je peux demander quel est le répertoire courant si je suis perdu : >>> os.getcwd() '/Users/jpr/Documents' Get Current Working Directory Je peux changer de répertoire courant et me déplacer (de façon relative ou absolue) vers un autre répertoire de l'arborescence : >>> os.chdir('../desktop/exemples/') Change Directory 6

Chemins et chaînes de caractères Un chemin peut être codé en Python par une chaîne. Problème avec Windows qui ne suit pas les conventions UNIX : les \ doivent être doublés (puisque \ est un caractère d'échappement dans une chaîne). (Linux/Mac) (Windows) '/users/hpastor/photos/coq.png' 'c:\\users\\hpastor\\documents\\tp1.py' Un bon logiciel doit fonctionner sur tous les OS. On peut demander en Python sur quel système on travaille : >>> os.name 'posix' Linux/Mac >>> os.name 'nt' Windows Mieux : on construit un chemin de manière portable : >>> os.path.join('hpastor','photos','coq.png') 'hpastor/photos/coq.png' >>> os.path.join('hpastor','documents','tp1.py') 'hpastor\\documents\\tp1.py' 7 Linux/Mac Windows

Quelques fonctions utiles du module os os.getcwd() os.chdir(path) os.listdir(path='.') os.path.join(path1,path2,...) os.remove(path) os.path.isfile(path) os.path.isdir(path) os.path.split(path) os.path.getsize(path) le répertoire courant changer de répertoire courant liste des fichiers et répertoires construction portable d'un chemin suppression d'un fichier test d'existence d'un fichier test d'existence d'un répertoire pour extraire le fichier d'un chemin la taille d'un fichier 8

Des fichiers en entrée et en sortie On peut vouloir écrire des données dans un fichier sur le disque. Pour ensuite lire ce fichier afin d'en extraire des informations, tout ou partie des données. Les deux activités de base sur les fichiers sont donc la LECTURE (in : fichier en entrée) et l'ecriture (out : fichier en sortie). out in out UC in 9 in out out

Ouverture d'un fichier en écriture Je souhaite créer un fichier test.txt contenant des résultats. Nous ne travaillerons dans ce cours qu'avec des fichiers de texte. Dans un tel fichier, nous ne pourrons donc déposer que des chaînes de caractères! Pour déposer -234, nous déposerons '-234'. Commençons par créer un nouveau fichier test.txt en écriture (write) avec la fonction open(filename,'w',encoding) où filename est une chaîne contenant le chemin (absolu ou relatif) menant au fichier. Si un ancien fichier de ce nom existe déjà, il est remplacé. f_out = open('test.txt', 'w', encoding = 'utf-8') >>> f_out <_io.textiowrapper name='test.txt' mode='w' encoding='utf-8'> La valeur de f_out, résultat de open, est un objet descripteur de fichier. L'encodage par défaut est US-ASCII. 10

Une fois le fichier ouvert, il est prêt à recevoir des données. for i in range(1,5) : f_out.write('5 * {} = {}\n'.format(i,5*i)) Vous avez noté la chaîne formatée 'xx{}xx{}x'.format(e 1,e 2 ) A la fin du traitement, n'oubliez pas de fermer le fichier (close)! f_out.close() Le tout se fait dans une fonction : def creer_fichier(f) : f_out = open(f,'w',encoding='utf-8') for i in range(1,5) : f_out.write('5 * {} = {}\n'.format(i,5*i)) f_out.close() Ouverture Traitement Fermeture Si le traitement est long, on peut le déléguer à une fonction spécialisée à laquelle on passera le descripteur de fichier f_out. 11

Il ne reste qu'à invoquer la fonction pour créer un fichier dans le répertoire courant : >>> creer_fichier('test.txt') # aucun résultat >>> os.listdir() ['.DS_Store', 'code9.py', 'Cours9.key', 'test.txt'] Maintenant le fichier test.txt existe sur le disque. Il faudra l'ouvrir avec un éditeur de texte compatible Unicode (ex: IDLE). 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 test.txt La méthode write permet d'écrire une ligne (terminée par un \n). La méthode writelines permet d'écrire une liste de lignes : liste = ['5 * {} = {}\n'.format(i,5*i) for i in range(1,5)] f_out.writelines(liste) 12

Ecrire à la fin d'un fichier Il peut être intéressant d'ajouter des lignes à un fichier. Il faut alors l'ouvrir en écriture en mode 'a' et non 'w'. f_out = open('test.txt', 'a', encoding = 'utf-8') Je vais rajouter deux lignes à la fin de mon fichier : def augmenter_fichier(f) : f_out = open(f,'a',encoding='utf-8') for i in range(5,7) : f_out.write('5 * {} = {}\n'.format(i,5*i)) f_out.close() Il n'est pas possible de supprimer des lignes dans un fichier. Il faut créer un nouveau fichier et détruire l'ancien! 13

Ouverture d'un fichier en lecture Problème inverse : comment lire le fichier texte test.txt? Je dois connaître son encodage! Or je sais qu il est en UTF-8. Je peux lire d'un seul coup la totalité du fichier dans une seule chaîne de caractères, avec la méthode read(). >>> texte = f_in.read() # une seule lecture! >>> f_in.close() >>> texte '5 * 1 = 5\n5 * 2 = 10\n5 * 3 = 15\n5 * 4 = 20\n' >>> print(texte) 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 f_in = open('test.txt', 'r', encoding = 'utf-8') N.B. La fin de ligne est codée différemment suivant les systèmes. Sur MacOS-X, c'est '\r'. Sur Linux, c'est '\n'. Sur Windows, c'est '\r\n'. Python s'adapte au système utilisé. 14

Ou bien je lis le fichier ligne à ligne avec la méthode readline(), jusqu'à obtention d'une ligne vide. def afficher_fichier(f) : # ligne à ligne f_in = open(f,'r',encoding='utf-8') i = 1 while True : ligne = f_in.readline() if ligne == '' : break # fin du fichier! print(i,':\t',ligne,sep='',end='') i = i + 1 f_in.close() >>> afficher_fichier('test.txt') 1: 5 * 1 = 5 2: 5 * 2 = 10 3: 5 * 3 = 15 4: 5 * 4 = 20 15

Il est parfois possible d'éviter readline(), car un descripteur de fichier est un objet itérable : def nb_lignes(f) : f_in = open(f,'r',encoding='utf-8') cpt = 0 for ligne in f_in : cpt = cpt + 1 f_in.close() return cpt >>> nb_lignes('test.txt') 6 def nb_lignes(f) : f_in = open(f,'r',encoding='utf-8') cpt = sum(1 for ligne in f_in) f_in.close() return cpt Enfin, la méthode readlines() permet d'obtenir en une seule instruction la liste de toutes les lignes d'un fichier texte. cpt = len(f_in.readlines()) 16

Travail en lecture et écriture Souvent, on prend un fichier en entrée et on produit un autre fichier en sortie (transformation). Exemple. J'ai un fichier dont chaque ligne contient des nombres. Je veux remplacer chaque ligne par la somme de ces nombres. fichier en entrée 83 21 10 34 98 11 34 18 69 76 92 88 28 54 62 17 33 45 13 82 18 11 88 67 85 88 51 89 66 20 98 49 72 29 59 33 78 86 42 62 alea.txt en sortie 246 208 324 190 269 314 307 301 somme.txt 17

def creer_alea(f) : # entre n = 4 et 10 lignes, et 5 entiers par ligne n = randint(4,10) f_out = open(f,'w',encoding='utf-8') for i in range(n) : # je produis n lignes for i in range(5) : f_out.write('{} '.format(randint(10,100))) f_out.write('\n') f_out.close() def transformer(f1,f2) : f_in = open(f1,'r',encoding='utf-8') f_out = open(f2,'w',encoding='utf-8') for ligne in f_in : somme = sum(map(int,ligne.split())) f_out.write('{}\n'.format(somme)) f_out.close() f_in.close() >>> creer_alea('alea.txt') >>> transformer('alea.txt','somme.txt') 18

Comment découper une ligne de texte? Très souvent, l information stockée dans un fichier contient divers éléments sur chaque ligne, séparés par une virgule (ou un espace, etc). C est ce que fait Excel lorsqu il sauve une feuille de calcul au format texte, pour que le programmeur puisse l exploiter en Python. Pour découper une ligne et obtenir une liste de ses constituants sous forme de chaînes, on utilisera la méthode str.split(sep=' ') : >>> 'anglais 12 10 15 8 17'.split() ['anglais', '12', '10', '15', '8', '17'] >>> 'anglais,12,10,15,8,17'.split(',') ['anglais', '12', '10', '15', '8', '17'] Inversement, la méthode sep.join(l) permet de recoller les éléments d une liste de chaînes, avec un séparateur : >>> '-'.join(['anglais','12','8','15']) 'anglais-12-8-15' 19

Résumé sur les fichiers-texte Ouverture en lecture : f_in = open('foo.txt','r',encoding='utf-8') Ouverture en écriture : Fermeture : Lecture : Ecriture : w a f_out = open('foo.txt',' ',encoding='utf-8') f.close() f_in.read() f_in.readline() f_in.readlines() f_out.write(x) f_out.writelines(liste) 20