Fichiers à différents emplacements et utilisation de fichiers CSV

14.3 Fichiers à différents emplacements et utilisation de fichiers CSV

Objectifs d'apprentissage

À la fin de cette section, vous devriez être en mesure de :

  • Démontrer comment accéder à des fichiers au sein d'un système de fichiers.
  • Démontrer comment traiter un fichier CSV.

Ouvrir un fichier à n'importe quel emplacement

Lorsque seul le nom de fichier est utilisé comme argument de la fonction open(), le fichier doit se trouver dans le même dossier que le fichier Python en cours d'exécution. Ex. : Pour que fileobj = open("file1.txt") dans files.py s'exécute avec succès, le fichier file1.txt doit être situé dans le même dossier que files.py.

Souvent, un programmeur a besoin d'ouvrir des fichiers situés dans des dossiers différents de celui où réside le fichier Python. Un chemin (path) identifie de manière unique l'emplacement d'un dossier sur un ordinateur. Le chemin peut être utilisé avec le nom de fichier pour ouvrir un fichier dans n'importe quel dossier. Ex. : Pour ouvrir un fichier nommé logfile.log situé dans /users/turtle/desktop, on peut utiliser ce qui suit :

fileobj = open("/users/turtle/desktop/logfile.log")

Système d'exploitation Emplacement du fichier

Exemple avec la fonction open()

Mac

/users/student/

fileobj = open("/users/student/output.txt")

Linux

/usr/code/

fileobj = open("/usr/code/output.txt")

Windows

c:\projects\code\

fileobj = open("c:/projects/code/output.txt")
ou
fileobj = open("c:\\projects\\code\\output.txt")

Tableau 14.2 Ouverture de fichiers sur différents chemins. Dans chacun des cas suivants, un fichier nommé output.txt se trouve dans un dossier différent du dossier Python. Windows utilise des barres obliques inverses \ au lieu de barres obliques / pour le chemin. Si la barre oblique inverse est incluse directement dans
open()
, une barre oblique inverse supplémentaire est alors nécessaire pour que Python comprenne correctement l'emplacement.

Concepts en pratique

Ouvrir des fichiers à différents emplacements

Pour chaque question, supposons que le fichier Python exécutant la fonction open() ne se trouve pas dans le même dossier que le fichier out.txt.

Chaque question indique l'emplacement de out.txt, le type d'ordinateur et le mode souhaité pour l'ouverture du fichier. Choisissez la meilleure option pour ouvrir out.txt.

1.
/users/turtle/files sur un Mac en lecture
  1. fileobj = open("out.txt")
  2. fileobj = open("/users/turtle/files/out.txt")
  3. fileobj = open("/users/turtle/files/out.txt", 'w')
2.
c:\documents\ sur un ordinateur Windows en lecture
  1. fileobj = open("out.txt")
  2. fileobj = open("c:/documents/out.txt", 'a')
  3. fileobj = open("c:/documents/out.txt")
3.
/users/turtle/logs sur un ordinateur Linux en écriture
  1. fileobj = open("out.txt")
  2. fileobj = open("/users/turtle/logs/out.txt")
  3. fileobj = open("/users/turtle/logs/out.txt", 'w')
4.
c:\proj\assets sur un ordinateur Windows en mode ajout
  1. fileobj = open("c:\\proj\\assets\\out.txt", 'a')
  2. fileobj = open("c:\proj\assets\out.txt", 'a')

Travailler avec des fichiers CSV

En Python, les fichiers sont lus et écrits en Unicode par défaut. De nombreux formats de fichiers courants utilisent Unicode, tels que les fichiers texte (.txt), les fichiers de code Python (.py) et d'autres fichiers de code (.c,.java).

Les fichiers de valeurs séparées par des virgules (CSV, .csv) sont souvent utilisés pour stocker des données tabulaires. Ces fichiers stockent des valeurs de cellules sous forme de texte Unicode séparées par des virgules. Les fichiers CSV peuvent être lus à l'aide des méthodes apprises jusqu'ici, comme le montre l'exemple ci-dessous.

Un fichier CSV affiché à la fois dans un tableur, montrant des données en lignes et en cellules, et dans un éditeur de texte, illustrant son format brut de valeurs séparées par des virgules.
Figure 14.2 Fichiers CSV. Un fichier CSV est simplement un fichier texte dont les lignes sont séparées par des caractères de retour à la ligne
\n
et les cellules sont séparées par des virgules.

Texte brut du fichier :

Title, Author, Pages\n1984, George Orwell, 268\nJane Eyre, Charlotte Bronte, 532\nWalden, Henry David Thoreau, 156\nMoby Dick, Herman Melville, 538

Exemple 14.3

Traitement d'un fichier CSV

    """Processing a CSV file."""
    # Open the CSV file for reading
    file_obj = open("books.csv")

    # Rows are separated by newline \n characters, so readlines() can be used to read in all rows into a string list
    csv_rows = file_obj.readlines()

    list_csv = []

    # Remove \n characters from each row and split by comma and save into a 2D structure
    for row in csv_rows:
      # Remove \n character
      row = row.strip("\n")
      # Split using commas
      cells = row.split(",")
      list_csv.append(cells)
    
    # Print result
    print(list_csv)

La sortie du code est :

    [['Title', ' Author', ' Pages'], ['1984', ' George Orwell', ' 268'], ['Jane Eyre', ' Charlotte Bronte', ' 532'], ['Walden', ' Henry David Thoreau', ' 156'], ['Moby Dick', ' Herman Melville', ' 538']]

Concepts en pratique

Types de fichiers et fichiers CSV

5.
Pourquoi readlines() fonctionne-t-elle pour lire les lignes d'un fichier CSV ?
  1. readlines() lit ligne par ligne à l'aide du caractère de retour à la ligne \n.
  2. readlines() n'est pas appropriée pour lire un fichier CSV.
  3. readlines() reconnaît automatiquement un fichier CSV et fonctionne en conséquence.
6.
Pour le code de l'exemple, quelle serait la sortie de l'instruction print(list_csv[1][2]) ?
  1. 532
  2. 268
  3. Jane Eyre
7.
Quelle est la sortie du code suivant pour le fichier books.csv présenté ci-dessus ?
file_obj = open("books.csv")

csv_read = file_obj.readline()

print(csv_read)
  1. ['Title, Author, Pages\n', '1984, George Orwell, 268\n', 'Jane Eyre, Charlotte Bronte, 532\n', 'Walden, Henry David Thoreau, 156\n', 'Moby Dick, Herman Melville, 538']
  2. [['Title', ' Author', ' Pages'], ['1984', ' George Orwell', ' 268'], ['Jane Eyre', ' Charlotte Bronte', ' 532'], ['Walden', ' Henry David Thoreau', ' 156'], ['Moby Dick', ' Herman Melville', ' 538']]
  3. Title, Author, Pages

Pour aller plus loin

Des fichiers tels que les documents Word (.docx) et les documents PDF (.pdf), les formats d'image tels que Portable Network Graphics (PNG, .png) et Joint Photographic Experts Group (JPEG, .jpeg ou .jpg), ainsi que de nombreux autres types de fichiers, sont encodés différemment.

Certains types de fichiers non-Unicode peuvent être lus à l'aide de bibliothèques spécialisées prenant en charge la lecture et l'écriture de différents types de fichiers.

PyPDF est une bibliothèque populaire qui peut être utilisée pour extraire des informations de fichiers PDF.

BeautifulSoup peut être utilisée pour extraire des informations de fichiers XML et HTML. Les fichiers XML et HTML contiennent généralement de l'Unicode dont la structure est définie par l'utilisation de balises entre chevrons <>.

python-docx peut être utilisée pour lire et écrire des fichiers DOCX.

De plus, csv est une bibliothèque intégrée qui peut être utilisée pour extraire des informations de fichiers CSV.

À vous d'essayer

Traitement d'un fichier CSV

Le fichier fe.csv contient les notes obtenues par un groupe d'étudiants à un examen final. Écrivez un programme qui affiche la note moyenne.