# Accès aux fichiers

## Types de fichiers

Il existe plusieurs types de fichiers. Dans ce cours, nous nous intéresserons aux fichiers textes et CSV.&#x20;

* **Fichier texte** : Fichier contenant des caractères sans structuration apparente.
* **Fichier CSV** : Fichier contenant des informations séparées par un caractère spécial (point virgule `;` , virgule `,` ou  d'autres caractères).

## Étapes d’accès à un fichier

Pour accéder à un fichier, nous avons besoin des trois étapes suivantes :

1. Ouvrir le fichier en mode lecture ou en mode écriture.
2. Lire l’information du fichier ou écrire dans le fichier.
3. Fermer le fichier.

## Chemin d’accès aux fichiers

Séquence de dossiers et sous-dossier pour atteindre un fichier à partir du code.

* **Chemin absolu** : À partir de la racine du disque du système de fichiers (C:\\..., D:\\...., etc.). \
  Exemple : `C:/Application/Data/mon_fichier.txt`
* **Chemin relatif**: À partir de la position du dossier courant.\
  Exemple : Si le code qui accède au fichier est dans le répertoire `/home/utilisateur/code.py` et que le fichier à accéder se trouve dans `/home/utilisateur/documents/mon_fichier.txt`, le chemin relatif serait `documents/mon_fichier.txt`

### Modes d'ouverture

* **"r"** : Mode lecture seule (read).
* **"w"** : Mode écriture (write).
* **"a"** : Mode ajout au texte existant (append).

### Ouverture et fermeture d’un fichier : méthode `open/close`

Syntaxe ouverture : *`var_objet_fichier = open(nom_fichier, mode_ouverture)`*

Syntaxe fermeture : `var_objet_fichier.close()`

Mode d’ouverture : Il existe trois modes d’ouverture pour un fichier  :&#x20;

{% hint style="danger" %}
Peu importe le mode d'ouverture, le fichier doit être fermé après utilisation car elle n'est pas automatique.
{% endhint %}

Exemple : ouverture fichier en mode lecture

```python
mon_fichier = open("Exemple.txt", "r")

# ...Code lecture du fichier ...

mon_fichier.close()
```

### Ouverture et fermeture d’un fichier : méthode `with open`

L'exemple suivant est en mode lecture. Mais la même syntaxe est valable en mode écrire "w" ou en mode ajout "a".

```python
with open("Exemple.txt", "r") as fichier:
    # ... lecture du fichier et autres traitements
```

### Lecture et écriture d’un fichier texte

#### Méthodes pour lire un fichier

* .read(): Retourne une chaîne contenant tous les caractères du fichier.
* .read(*n*): Retourne une chaîne contenant les *n* prochains caractères.
* .readline(): Retourne une chaîne de tous les caractères jusqu’au prochain retour de ligne (\n).
* .readlines(): Retourne une liste contenant chacune des lignes du fichier (incluant /n) comme éléments de la liste.
* .read().splitlines(): Retourne une liste contenant chacune des lignes du fichier (excluant /n) comme éléments de la liste.

{% hint style="info" %}
À chaque lecture, le curseur se déplace. La prochaine lecture se fera à partir de la nouvelle position de ce curseur.
{% endhint %}

#### &#x20;Méthodes pour écrire dans un fichier

* .write(\<str>) : Écrit une chaîne de caractères dans le fichier.
* .writelines(\<list>) : Écrit une liste de chaîne de caractères dans le fichier.

{% hint style="info" %}

* Le retour de ligne (\n) n’est jamais inclus. Il faut donc prévoir de l’ajouter en cas de besoin.
* En mode écriture, le fichier sera créé s’il n’existe pas. ATTENTION! S’il existe, il sera écrasé.
* En mode ajout, le fichier sera créé s’il n’existe pas. S’il existe, l’ajout se fera à la fin du fichier.
  {% endhint %}

## Exercice

En complément au laboratoire crypto varié, sauvegardez les mots de passes avec leurs hash respectifs dans un fichier txt ou csv (au choix).

{% content-ref url="../laboratoires/crypto-variee" %}
[crypto-variee](https://cours-5.gitbook.io/dalicia-420-1g2-hu-logique-de-programmation/laboratoires/crypto-variee)
{% endcontent-ref %}
