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 :

Questions générales : performance lecture fichier et excel en python [Python 2.X]


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut Questions générales : performance lecture fichier et excel en python
    Bonjour,


    J'aimerais reproduire le comportement d'Excel sous Python sous la forme d'une IHM. En gros reproduire un onglet, les cellules et permettre de faire des opérations comme sous Excel. L'idée serait de ne plus dépendre de la version d'Excel utilisée.
    Savez-vous si ce genre de chose existe déjà en opensource ?

    De plus, je rencontre un problème de performance lorsque je lis des fichiers qui sont assez lourd pour mettre en forme ou faire des recherches (plusieurs centaines de mo). Ce que je fais :
    - readlines()
    - boucle sur les lignes pour mettre en forme

    Or quand il y a plusieurs millions de lignes ça prend une éternité. Existe-t-il une méthode pour aller plus vite ? Passer par du fortran serait plus efficace ?

    Merci pour votre aide !

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Application multidocuments, tableur, architecture Modèle Vue Contrôleur ... PyQt est fait pour toi.

    Les ressources ne manquent pas, sur ce site d'abord (en français) et quelques ouvrages spécialisés (en anglais généralement).


    Pour ta lecture de fichier, qui est une toute autre question, sache que readlines() te retourne une liste de la totalité des lignes de texte du fichier. Pas s'étonner que ça déborde parfois. Utilise readline comme itérateur à la place.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par coolpix77 Voir le message
    J'aimerais reproduire le comportement d'Excel sous Python sous la forme d'une IHM. En gros reproduire un onglet, les cellules et permettre de faire des opérations comme sous Excel. L'idée serait de ne plus dépendre de la version d'Excel utilisée.
    Savez-vous si ce genre de chose existe déjà en opensource ?
    Bonjour,
    Quelque chose comme Calc de LibreOffice?
    Je pense que la tâche est vraiment ardue. Mais alors vraiment!!
    (Quelques centaines de codeurs assidus avec une hiérarchie très bien structurée…)

    Clodion

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    @VinsS :

    Aurais-tu des exemples de documentation ? Je connais PyQt mais je ne vois pas quel module pourrait m'aider dans ce que je veux faire.

    Sinon concernant readlines(). Que je lise les lignes une par une avec readline ou que je lise tout d'un coup et que je boucle ça revient au même non ? J'aurais toujours mon problème de performance

    @Clodion : Oép ça m'a l'air un peu hors portée eheh ! Je cherche plus une IHM de type tableur développée sous Python avec des fonctions avancées type Excel (filtre, c/c, etc...)

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par coolpix77 Voir le message
    ...
    Je connais PyQt mais je ne vois pas quel module pourrait m'aider ...
    Ça me paraît contradictoire. Tu as des ressources entre autre ici:

    http://pyqt.developpez.com/tutoriels/

    Ce livre très complet:

    http://pyqt.developpez.com/livres/in...is#L0132354187

    Moi personnellement, je cherche l'inspiration avec ce moteur de recherche:

    http://nullege.com/

    -------------------------------------------------------------------------------------------------------------------------------


    for line in inf.readlines() et inf.readline() ne sont pas la même chose. Du tout.

    Exemples d'utilisation de readline():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    # -*- encoding: utf-8 -*-
     
    # Première méthode:
     
    def file_iterator(path):
        with open(path, "r", encoding='utf-8') as inf:
            for line in inf:
                yield line
     
    fi = file_iterator('mongrosfichier')
    while 1:
        try:
            print(next(fi))
        except StopIteration:
            break
     
    # Deuxième méthode:
     
    inf = open('mongrosfichier', "r", encoding='utf-8')
    src = inf.readline
     
    while 1:
        l = src()
        if not l:
            break
        print(l)
     
    inf.close()

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    J'ai pas dis que c'était la même chose mais que les méthodes étaient équivalentes en terme de performance.
    Après je peux me tromper !

    Sinon j'ai trouvé ça : http://manns.github.io/pyspread/index.html
    ça a l'air de répondre à mon besoin

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

Discussions similaires

  1. Performance lecture fichier
    Par MatRem dans le forum Général Python
    Réponses: 8
    Dernier message: 04/12/2011, 03h10
  2. {VBA Excel}Question sur la lecture de fichier excel
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2007, 09h12
  3. [VB.net] Lecture fichier excel, cellule fusionnée
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/08/2006, 13h12
  4. Lecture d'un fichier avec Excel . .
    Par Flow_75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/06/2006, 21h59
  5. 3 questions sur l’importation de fichier Excel
    Par helenafr dans le forum Access
    Réponses: 5
    Dernier message: 05/04/2006, 07h38

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