Introduction aux fichiers CSV avec PowerShell (partie 1)

Vous débutez avec PowerShell et vous vous demandez comment manipuler facilement des fichiers CSV ? Que vous soyez administrateur système, analyste ou simplement curieux, cet article va vous montrer pas à pas comment lire, comprendre et exploiter des fichiers CSV avec PowerShell. Et ce, sans avoir besoin d’Excel !

Qu’est-ce qu’un fichier CSV ?

Définition

Pour créer un fichier CSV, on structure un fichier texte avec une ligne d’en-tête suivie de lignes de données. Puis, un séparateur sépare chaque donnée. Les anglo-saxons utilisent généralement la virgule, nous francophones plutôt le point-virgule.

CSV signifie Comma Separated Values, soit valeurs séparées par une virgule.

Exemple de fichier CSV simple :

Name;Surname;Age
Larsouille;joe;30
Ducable;Jean-Raoul;33
Lapuree;jérémie;25
Bracame;Edouard;27
Posichon;Paul;40

Cas d’utilisation courants

Les entreprises utilisent très couramment les fichiers CSV pour les raisons suivantes :

  • Facilité d’usage
  • Structure des données aisément compréhensible
  • Manipulation aisée

Un fichier CSV s’ouvre très facilement dans Excel. La plupart du temps Excel reconnaît même le fichier sans avoir rien à faire de spécial. Ainsi le fichier s’affiche parfaitement bien et chaque colonne est reconnue. Un utilisateur peut donc modifier facilement les données et le sauvegarder à nouveau en CSV (tant qu’il ne fait ni mise en forme, ni création de formules).

Etant donné la structure simple, n’importe qui comprend la constitution d’un fichier CSV car chaque ligne représente un enregistrement, à l’image de ce qu’on peut trouver dans une base de données.

Pourquoi utiliser PowerShell pour manipuler les fichiers CSV ?

L’avantage d’utiliser PowerShell pour manipuler les fichiers CSV est qu’il va être facile de charger l’intégralité du fichier en mémoire et de manipuler les données. Les données seront importées sous la forme d’un tableau d’objets.

Si vous avez compris la puissance de l’orientation objet de PowerShell, l’intérêt devient évident. En effet, en quelques commandes PowerShell vous pourrez par exemple trier les données, et faire des calculs. Ainsi, il n’y aura nul besoin de passer par Excel pour faire des traitements simples ou très complexes.

Et si vous avez besoin d’exporter des données en CSV, ce sera tout aussi simple car PowerShell possède un jeu de commandes dédié que nous verrons dans un prochain article.

Lire un fichier CSV avec PowerShell : Import-CSV

Reprenons l’exemple du fichier CSV précédent. Nous appellerons notre fichier joebarTeam.csv, et en voici son contenu :

Name;Surname;Age
Larsouille;joe;30
Ducable;Jean-Raoul;33
Lapuree;jérémie;25
Bracame;Edouard;27
Posichon;Paul;40

La première chose à faire est tout d’abord d’identifier le délimiteur des données. Pour se faire, vous devrez ouvrir le fichier dans n’importe quel éditeur de texte ou bien afficher son contenu depuis la console PowerShell à l’aide de la commande Get-Content.

Par exemple :

PowerShell
PS > Get-Content -FilePath ./joebarTeam.csv

Import-CSV : syntaxe de base et exemples

Maintenant que nous nous sommes assurés de la présence de la ligne d’entête et que nous avons identifié le délimiteur, nous pouvons utiliser la ligne de commandes suivante pour charger le fichier en mémoire et plus particulièrement dans la variable que j’ai appelée arbitrairement $data :

PowerShell
PS > $data = Import-Csv -Path .\joebarTeam.csv -Delimiter ';'

Observons à présent le type de la variable $data :

PowerShell
PS > $data.GetType() 

IsPublic IsSerial Name     BaseType 
-------- -------- ----     -------- 
True     True     Object[] System.Array

On constate que $data est un tableau d’objets car nous pouvons constater la présence des crochets dans le colonne Name juste après le nom du type Object. Jusque-là tout est normal. 

Contrôlons à présent le type de données et les propriétés des objets que nous avons importé. Pour se cela, nous utiliserons la commande Get-Member.

Get-Member est une commande essentielle dans PowerShell. Si vous ne la connaissez pas, vous devez absolument apprendre à la maîtriser. Celle-ci permet d’obtenir de l’information sur le type de l’objet manipulé ainsi que ses caractéristiques (propriétés et méthodes que l’on appelle « les membres », d’où le nom de la commande)

PowerShell
PS > $data | Get-Member 

TypeName: System.Management.Automation.PSCustomObject 

Name        MemberType   Definition 
----        ----------   ---------- 
Equals      Method       bool Equals(System.Object obj) 
GetHashCode Method       int GetHashCode() 
GetType     Method       type GetType() 
ToString    Method       string ToString() 
Age         NoteProperty string Age=30 
Name        NoteProperty string Name=Larsouille 
Surname     NoteProperty string Surname=joe

Nous pouvons constater que les objets contenus dans $data sont de type PSCustomObject et qu’ils possèdent les propriétés Name, Surname, Age. De fait, celles-ci correspondent exactement à la ligne d’en-tête de notre fichier CSV, ce qui explique ce résultat.

Affichons maintenant le contenu de $data pour vérifier que nos données ont été correctement importées en mémoire :

PowerShell
PS > $data

Name       Surname    Age
---        ------     ---
Larsouille joe        30
Lapuree    jérémie    25
Ducable    Jean-Raoul 33
Bracame    Edouard    27
Posichon   Paul       40

Le fichier CSV a été importé correctement; nous allons par conséquent pouvoir traiter les données.

Conseils pour éviter les erreurs courantes

Problème avec le délimiteur

L’erreur la plus classique consiste à tenter d’importer un CSV sans préciser le délimiteur (voir capture d’écran ci-après). Si c’est le cas, PowerShell choisira alors le délimiteur virgule par défaut, par conséquent vous n’importerez pas correctement votre fichier. PowerShell ne retournera cependant pas d’erreur, et la seule façon de s’en rendre compte c’est soit d’afficher $data et de constater que les colonnes ne sont pas ce qu’elles devraient être.

Image montrant un import de fichier CSV raté en PowerShell car il manque l'indication du délimiteur de champs
Cette image illustre l’impact d’une commande PowerShell qui ne précise par le délimiteur du fichier CSV.

Un bon réflexe à avoir est de toujours utiliser Get-Member pour contrôler les propriétés de nos objets. Ici, nous pouvons nous rendre compte que les noms des propriétés de ne correspondent pas à l’entête du fichier. Cela doit vous mettre la puce à l’oreille 😉.

PowerShell et les problèmes de caractères accentués (=problème d’encodage du fichier CSV)

Vous vous rendez compte au moment de l’affichage des données de votre fichier que les accents ne s’affichent pas correctement ? Cela se produit si le fichier CSV se trouve dans un format d’encodage qui ne coïncide pas avec le format d’encodage de la console PowerShell. De plus, selon la version de PowerShell que vous utilisez le comportement pourra différer quelque peu.

Si cela se produit, votre salut pour vous en sortir passera par l’essai des différentes valeurs d’encodage de la commande Import-CSV via le paramètre -Encoding.

Par exemple, si vous travaillez avec PowerShell 7 et que le fichier CSV est encodé au format ANSI (ASCII étendu), alors vous devrez utiliser la ligne de commande suivante :

PowerShell
PS > $data = Import-Csv -Path .\joebar.csv -Delimiter ';' -Encoding ANSI

Conclusion

Tout d’abord, vous savez désormais comment lire un fichier CSV avec PowerShell, identifier les erreurs fréquentes et vérifier l’importation. Ensuite, gardez à l’esprit que la cause la plus courante d’échec concerne le délimiteur. De ce fait, avant toute nouvelle tentative d’importation dans PowerShell, pensez systématiquement à ouvrir votre fichier dans un éditeur de texte. Enfin, grâce à cette vérification préalable, vous éviterez bien des déconvenues lors du traitement de vos données. les erreurs fréquentes et contrôler l’importation.

Dans le prochain article, nous verrons comment trier, filtrer et rechercher dans un fichier CSV avec PowerShell sans jamais ouvrir Excel.

🔗 Liens utiles

💼 Besoin d’aller plus loin ?

Je propose des formations PowerShell personnalisées, en ligne ou en entreprise. Découvrez-les ici.