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 :

Repartir au début d'un fichier CSV


Sujet :

Python

Vue hybride

Frank_Rook Repartir au début d'un... 05/03/2012, 11h44
Frank_Rook Aprés réfléxion je me demande... 05/03/2012, 12h06
fred1599 Je pense que la solution... 05/03/2012, 12h16
wiztricks Salut, Pour savoir si deux... 05/03/2012, 14h23
fred1599 @Wiztricks Je pense que tu... 05/03/2012, 15h19
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Par défaut Repartir au début d'un fichier CSV
    salut,

    J'ai un petit soucis de fichier CSV. Je parcours un fichier CSV en faisant des tests puis je veux le remettre au debut. Je pensais qu'il fallait utiliser seek(0) mais j'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: '_csv.reader' object has no attribute 'seek'
    voilà mon code :

    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
     
        def test( self, event ):#fonction d'un de mes bouton
     
            # Compare les Deux fichiers ligne par ligne
            error = True
            while error==True:
                try:
                    line1 = self.fichier1.next()
                    line2 = self.fichier2.next()
                    error = (line1==line2)
     
                except StopIteration:
                    break
            if error == True:
                print "Les Documents sont identiques"
            else:
                print "Les Documents sont différents"
     
     
     
            self.fichier1.seek(0) #remet le curseur au debut du fichier
            self.fichier2.seek(0)
     
            #Ensuite je fais d'autre truc sans intérêt pour le problème que j'ai
     
     
            event.Skip()
    Je comprend pas

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Par défaut
    Aprés réfléxion je me demande si l'erreur ne viendrai pas du fait que je ne fait pas le .seek(0) directement sur le fichier ? car self.fichier1 est une variable qui contien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.fichier1 = csv.reader(open(mon_fichier.csv,"rb"), delimiter=';')

    Donc je pense qu'il faut que je reformule ma question :

    Comment on revient au début de ma variable self.fichier1 ?

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    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 063
    Par défaut
    Je pense que la solution serait de créer une fonction qui prend en paramètre 2 fichiers, dont vous feriez la comparaison ligne par ligne

    Si une ligne du fichier n'est pas dans les lignes de l'autre fichier, le fichier est différent, d'où une fonction isdifferent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def isdifferent(file1, file2):
        with open(file1, 'r') as f1, open(file2, 'r') as f2:
            lines_f1 = [line.strip() for line in f1.readlines()]
            lines_f2 = [line.strip() for line in f2.readlines()]
            if len(lines_f1) != len(lines_f2):
                return True # fichiers différents
            else:
                for line in lines_f1:
                    if line not in lines_f2:
                        return True # fichiers différents
            return False # fichiers identiques

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Pour savoir si deux fichiers sont différents la méthode de fred1599 me va bien.

    Un point d'attention quand même.
    Un .CSV peut être aussi un ensemble d'enregistrements { a, b, c, d } (le dump d'une table de SGDB) différents un à un mais pas nécessairement placés au même endroit. Dans ce cas les .CSV { d, b, c, a } et { a, b, c, d } pourraient être égaux alors que les fichiers sont différents.

    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    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 063
    Par défaut
    @Wiztricks

    Je pense que tu veux parler de cette partie de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else:
        for line in lines_f1:
            if line not in lines_f2:
                return True
    En effet j'avais remarqué, mais aussi j'ai fais la constatation qu'un fichier ayant des lignes identiques placées différemment revenait à 2 fichiers identiques.

    Sinon on peut travailler par index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else:
        for ind, line in enumerate(lines_f1):
            if line != lines_f2[ind]:
                return True

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,
    @fred1599
    Mon propos était de dire "attention, au delà de la comparaison du contenu des fichiers telle que proposée par filecmp, çà ne donnera pas nécessairement le résultat attendu".
    Je n'avais pas lu les détails du code et comme il fait "plus que" filecmp, il me plaît "moyen".

    Mon exemple sur l'inversion de deux lignes est weak pour illustrer la chose...
    Est-ce que parler d'inversion de colonnes parle plus?
    On pourrait avoir un .CSV construit avec "nom, prénom, age" l'autre avec "age, prénom, nom" qui pourraient être "égaux" sans pour autant être identiques.
    Ceci dit, cela dépasse sans doute largement les pré-occupations de l'auteur.

    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Ajout d'une ligne en début de fichier CSV
    Par dbtn89 dans le forum Langage
    Réponses: 13
    Dernier message: 12/05/2015, 19h52
  2. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  3. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  4. [String] Caractère en trop au début d'un fichier
    Par Seiya dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 12/07/2004, 14h00
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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