Découper un fichier CSV volumineux : script Python et alternatives

Vivre seul, c'est prendre plaisir à manger du céleri rémoulade dans son papier d'emballage.

Jean Yanne ( Nouveau design ! )

Illustration découpe CSV

Partager :

Facebook X (Twitter) LinkedIn Email WhatsApp

Problématique : ouvrir un fichier CSV trop volumineux

Big Data - fichiers CSV volumineux

Ouvrir un fichier CSV de grande taille peut être difficile pour diverses raisons :

Toujours prêt à sortir mon Python pour répondre à vos demandes, je vous ai proposé il y a 7 ans un petit script qui ouvre le fichier fichier.csv (par défaut, mais c'est modifiable), rédigé en Latin-1 (par défaut, mais c'est modifiable), le coupe en fichiers CSV de 100 000 lignes (par défaut, mais c'est modifiable) appelés export_1.csv, export_2.csv... (par défaut, mais c'est modifiable).

Version originale 2019

Code Python traduit en HTML:
# -*- coding: utf-8 -*-#csv_decoupe est une application python 3.6.4 par wouf 09/07/2019#qui découpe un csv#constantesfichier="fichier.csv"export="export"nblignes=100000lang="Latin-1"compteur=0first_export=export+"_1.csv"g=open(first_export,'a',encoding=lang)page=1with open(fichier,encoding=lang) as f :   for line in f :        compteur+=1        if compteur==nblignes:            g.close()            print('|',end="" )            page+=1            compteur=0            lexport=export+"_" +str(page)+".csv"            g=open(lexport,'a',encoding=lang)        g.write(line)try:    g.close()except:    pass

En 2019, ce court script faisait parfaitement le job :

Résultat du script Python de découpe CSV

Mise à jour 2026 : 7 ans plus tard Nouveau

Sept ans après la création de ce script, mes connaissances Python ont évolué. Le code de 2019 faisait parfaitement le job, mais aujourd'hui je l'écrirais différemment :

Voyons concrètement ce qui change.

Version 2026

Le même algorithme, écrit avec les pratiques actuelles :

Code Python traduit en HTML:
# -*- coding: utf-8 -*-# csv_decoupe - Version 2026 par wouf# Découpe un fichier CSV en plusieurs morceauxfrom pathlib import Path# Configurationfichier = Path("fichier.csv")export_base = "export"nb_lignes = 100000encoding = "latin-1"# Traitementpage = 1compteur = 0with fichier.open(encoding=encoding) as lecture:    sortie = Path(f"{export_base}_{page}.csv").open('w', encoding=encoding)        for ligne in lecture:        sortie.write(ligne)        compteur += 1                if compteur == nb_lignes:            sortie.close()            print('|', end='', flush=True)            page += 1            compteur = 0            sortie = Path(f"{export_base}_{page}.csv").open('w', encoding=encoding)        sortie.close()print(f"\n✓ {page} fichiers créés")

Import de pathlib : la gestion moderne des fichiers

L'utilisation de from pathlib import Path remplace la manipulation de chaînes de caractères pour les chemins de fichiers. Path est un objet qui connaît les spécificités du système d'exploitation (Windows, Linux, Mac) et offre des méthodes claires comme .open(), .exists(), ou .stem. C'est devenu la méthode recommandée depuis Python 3.4 et aujourd'hui, en 2026, son usage est totalement généralisé.

Suppression de la variable first_export

Dans l'ancien code, first_export était créé séparément avant la boucle, puis les fichiers suivants utilisaient une autre logique. Cette duplication crée une asymétrie inutile. En initialisant directement page = 1 et en utilisant la même logique pour tous les fichiers, le code devient plus cohérent et plus facile à maintenir.

Le paramètre flush=True pour l'affichage temps réel

Par défaut, Python met en buffer les affichages console pour des raisons de performance. Avec print('|', end='', flush=True), on force l'affichage immédiat de chaque pipe, offrant un retour visuel instantané de la progression. Sans ce paramètre, tous les pipes pourraient s'afficher d'un coup à la fin.

Disparition du try/except final

Le try/except était nécessaire en 2019 pour gérer le cas où le fichier g était déjà fermé. Avec la nouvelle structure où sortie.close() est appelé de manière déterministe après la boucle, ce bloc devient superflu. Le code est plus clair car il ne masque plus d'erreurs potentielles.

Message de confirmation final

L'ajout de print(f"\n✓ {page} fichiers créés") donne une information claire à l'utilisateur sur le nombre de fichiers générés. C'est un retour d'information utile qui n'existait pas dans la version originale où seuls les pipes indiquaient la progression.

Et si on n'utilisait pas Python ?

En 2026, la solution la plus rapide et la plus élégante pour découper un fichier CSV est... de ne pas coder du tout !

La commande split (Linux/Mac)

Sous Linux et Mac, l'utilitaire split est préinstallé et fait exactement ce travail en une seule ligne de commande :

split -l 100000 --additional-suffix=.csv fichier.csv export_

Décortiquons cette commande :

Résultat : des fichiers nommés export_aa.csv, export_ab.csv, export_ac.csv... créés en quelques secondes, même pour des fichiers de plusieurs gigaoctets.

Performances impressionnantes

Là où notre script Python traite environ 50 000 lignes par seconde, split peut atteindre plusieurs millions de lignes par seconde. Sur un fichier de 10 millions de lignes (environ 2 Go) :

🐍 Python

3-4 minutes

⚡ split

10-15 secondes

Cette différence s'explique par le fait que split est un utilitaire système écrit en C, optimisé depuis des décennies, alors que Python ajoute une couche d'interprétation.

Et sous Windows ?

Windows ne dispose pas nativement de split, mais vous pouvez l'utiliser via :

Une fois WSL ou Git Bash installé, la commande fonctionne exactement de la même manière.

Limitations de split

Malgré sa puissance, split a quelques limites :

Quand utiliser split plutôt que Python ?

Privilégiez split si :

Gardez Python si :

Dans mon cas, j'ai créé ce script Python en 2019 pour répondre à une demande spécifique d'une collègue qui travaillait sous Windows. Aujourd'hui, avec WSL facilement accessible, je lui conseillerais probablement split pour un usage ponctuel, mais je conserve le script Python comme outil pédagogique pour montrer la manipulation de fichiers en Python.

📦 Autres ressources : Python apprendre par l'exemple

🛠️ Exemples sur site2wouf.fr

💻 Tester

📖 Blog

📥 Téléchargements

// Remarques, codes, notes de version...

Mon travail est sous licence Creative Commons.

N'hésitez pas à me contacter si vous détectez la moindre imperfection, ou si vous imaginez une amélioration potentielle !

Open source et gratuité n'empêchent ni les dons ni les remerciements 😉
Un euro ou deux pour m'aider à payer le serveur ? 💙 Faire un don sur PayPal