python lire en temps réel gros fichier csv

a marqué ce sujet comme résolu.

Bonjour, j’ai un gros fichier csv de 200mo et je voudrais en python le lire en temps réel le programme démarre il vas me lire chaque ligne puis des qu’il aura atteint la dernière ligne il attends. des qu’il recoit une nouvelle ligne il me l’affiche

j’ai par exemple ceci dans mon fichier :

1
2
toto,tutu,titi
1,2,3

et des que je vais rajouter ceci dans mon fichier :

1
test1,test2,test3

je veut qu’il me l’affiche.

je veut donc en gros afficher les données qui ont été rajouter dans le fichier, comme c’est un gros fichier de 200mo, je peut pas me permettre de faire un open et toute les secondes

actuelement pour lire ce fichier j’utilise la lib pandas qui me permet de récupérer le fichier par morceaux (de 200 lignes par exemple), car le but apres c’est d’afficher les données dans un graph matplitlib

+0 -0

Comment tu utilise pandas actuellement ? Je ne connais pas trop cette bibliothèque.

L’idée devrai être la même avec n’importe quel itérateur ; au-lieu d’utiliser une boucle for pour itérer les éléments, il faut utiliser la fonction next pour procéder manuellement à l’itération et gérer l’exception StopIteration quand la fin est atteinte.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import csv
import time

with open("file.csv") as file:
    reader = csv.reader(file)
    while True:
        try:
            row = next(reader)
            # ...
        except StopIteration:
            time.sleep(0.5)

j’utilise pandas comme ceci :

1
2
3
import pandas as pd
for chunk in pd.read_csv(filename, chunksize=200):
    process(chunk)

mais du coup l’idée c’est de remplacer ma boucle for par un while True et de faire un sleep quand y’a plus rien

j’ai encore une question, j’aimerais récuperer le fieldname de mon fichier csv sans lire tous le fichier. le fieldname c’est le titre de mes colonnes, il s’agit concretement de ma première ligne, donc je voudrais lire la 1ere ligne sans lire le reste.

mon fichier est dans ce style :

1
2
3
4
id,nom,prenom
1,toto,bob
2,tutu,charlotte
3,titi,henri

je voudrais récupérer cette chaine de caratcere id,nom,prenom

+0 -0

Tu peux récupérer les titres des colonnes avant d’entrer dans la boucle, ça ne pose pas de problème.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import csv
import time

with open("file.csv") as file:
    reader = csv.reader(file)
    fieldnames = next(reader)
    while True:
        try:
            process(fieldnames, next(reader))
        except StopIteration:
            time.sleep(0.5)
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte