IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Nombre de ligne d'un fichier CSV


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 16
    Par défaut Nombre de ligne d'un fichier CSV
    Bonjours,

    J'aurais aimé savoir s'il existe une fonction qui permet de récupérer le nombre de ligne d'un fichier CSV.

    Pour le moment je fait défiler tous mon fichier avec un For et une fois que tous le fichier est passé j'utilise la fonction line_num, mais c'est pas génial.


    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def mapcount(filename):
        with open(filename, "r+") as f:
            buf = mmap.mmap(f.fileno(), 0)
            lines = 0
            readline = buf.readline
            while readline():
                lines += 1
        return lines
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def bufcount(filename):
        with open(filename) as f:
            lines = 0
            buf_size = 1024 * 1024
            read_f = f.read
            buf = read_f(buf_size)
            while buf:
                 lines += buf.count('\n')
                 buf = read_f(buf_size)
        return lines

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il y a bien line_num de csvreader, mais il faut avoir lu le fichier une fois pour qu'il donne la bonne valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import csv
    with open("fichier.csv", 'rb') as f:
        reader = csv.reader(f, delimiter=';')
        for row in reader:
            print row
        print reader.line_num

    Sinon, il n'y a qu'une solution du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def csvcount(filename):
        with open(filename, 'r') as f:
            i = 0
            for ligne in f:
                i += 1
        return i
    Même si ce n'est pas très élégant, c'est assez rapide!

    On peut aussi lire le fichier csv par bloc binaire, et compter le nombre de fins de lignes.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Même si ce n'est pas très élégant, c'est assez rapide!
    C'est la moins rapide de toutes celles que j'ai tenté, mais tout dépend de la taille du fichier à lire. Pour des fichiers de grande taille, il est fortement conseillé d'utiliser les fonctions que je propose.

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour fred1599,

    J'ai essayé avec un fichier que j'avais de 4000 lignes et 20 champs par ligne, et j'ai obtenu moins de 1/100 seconde. Pour ce qui me concerne, cela couvre largement mes besoins, et le code reste très simple. Pour de plus grands fichiers, je regarderai tes solutions.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    J'ai essayé avec un fichier que j'avais de 4000 lignes et 20 champs par ligne, et j'ai obtenu moins de 1/100 seconde. Pour ce qui me concerne, cela couvre largement mes besoins, et le code reste très simple. Pour de plus grands fichiers, je regarderai tes solutions.
    je n'en doute pas, les tests sont , en ce qui concerne les fonctions que je propose.

    Tu te rendras compte que la fonction simplecount est la fonction la moins optimisée, mais comme tu dis, tout dépend des besoins.

    J'avoue que je n'ai pas d'ordre de grandeurs de la taille d'un fichier csv.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,
    Comme les lignes d'un fichier texte sont de longueur variable, difficile de compter les lignes sans lire tout le fichier. Après la question est de savoir
    quelle est la primitive Python qui va déléguer le plus grand nombre d'itérations aux fonctions C.
    Une solution pourrait être d'utiliser readlines avec un sizehint (pour ne pas lire tout le fichier d'un coup):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SIZEHINT = 100
    def get_linecount(path):
        count = 0
        with open(path) as f:
            while True:
                lines = f.readlines(SIZEHINT)
                if not lines: return count
                count += len(lines)
    Si le fichier est "très gros", aller vite sans tout lire signifiera peut être de se contenter d'une approximation obtenue en lisant un nombre fini de blocs de x bytes répartis uniformément sur l'ensemble du fichier. Mais c'est plus compliqué ;-)
    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Déterminer le nombre de lignes d'un fichier csv
    Par charouel dans le forum C#
    Réponses: 7
    Dernier message: 14/06/2013, 18h28
  2. Nombre de" ; "par ligne dans un fichier CSV
    Par delilou dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 25/07/2011, 15h01
  3. Nombre de ligne d'un fichier
    Par charliejo dans le forum MFC
    Réponses: 4
    Dernier message: 07/04/2005, 10h10
  4. [Fichier] Nombre de ligne dans un fichier texte
    Par NewSer dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2004, 16h58
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo