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 :

[os]Problème de lecture fichier


Sujet :

Python

  1. #1
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut [os]Problème de lecture fichier
    Bonjour à tous,
    j'ai actuellement besoin de créer un script python tout ce qui a de plus simple, il ouvre un fichier, extrait tout ce qu'il faut par rapport à un séparateur spécifique.

    J'ai donc un fichier texte, que j'ai extrait de Active Directory via CSVDE, et je voudrais maintenant traité ce fameux fichier texte, problème, je n'arrive pas a "bien" lire le fichier, à noter que je suis actuellement sous Vista, peut-être est-ce un bug venant de l'OS, et je suis actuellement avec la version 2.5.2 de python, bref passons au problème.

    Lors de l'ouverture de ce fichier via un éditeur de texte quelconque, on a bien un fichier tout ce qu'il y a de plus normal, ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A enlever1 ", A extraire1
    A enlever2 ", A extraire2
    Suite à l'exécution du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import os
     
    ofi = open('fich_export.txt', 'r')
    while 1 :
        line = ofi.readline()
        if not line : break 
        else:
            print line

    Ca nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     A   e n l e v e r 2   " ,   A   e x t r a i r e 2
    Noter que python a mis un espace entre chaque caractère de mon code, lors de la réécriture de tout ça dans un fichier, le problème persiste même avec un éditeur de texte.

    C'est donc ici que je bloque, j'ai pensé à un caractère spécial entre chaque caractère, mais je n'ai pas réussi à l'extraire. J'ai regardé un petit peu du côté de l'encodage, mais je n'ai rien trouvé. J'ai bien évidemment fouillé la docs, mais rien à ce sujet, je n'est peut-être pas été assez perspicace, bref !

    Donc voilà en espérant que quelqu'un pourrait éclairer ma lanterne sur ce sujet.

    EDIT : Petite erreur dans mon code corrigée C'était une ancienne version, le problème persiste !

    EDIT2 : J'ai trouvé la cause du problème, il y a des caractère au code ASCII 00 qui se mette entre chaque champ. Maintenant il me reste plus qu'à les enlever. Si quelqu'un a une idée comment faire, j'avais pensé à lire le fichier 8 bits / 8bits, mais il retourne quoi dans ce cas

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Chez moi, c'est OK. Ca me semble toutefois plus simple et pythonique d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ofi = open('fich_export.txt', 'r')
    for ligne in ofi:
        print ligne
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut
    Comme je le disait plus haut (dans mes différents EDIT ), à l'export avec csvde des comptes active directory, ce salaud me rajoute des caractères NUL (code héxa : 00 ) entre chaque caractère et python semble interprété ça comme un espace quand il doit l'écrire, donc maintenant faut que je supprime ces caractères avant de pouvoir faire mon traitement.

    Merci pour ta réponse, je ne code presque jamais en python, donc je ne connais pas les manières de coder.

    Voilà, donc si maintenant quelqu'un sais comment lire les byte d'un fichier en python ca m'intéresse fortement , il n'y a pas de fonction readBytes comme en java et c'est bien dommage !

    EDIT: Pardon bit par bit et non pas byte par byte (octet / octet)

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Le mieux à faire et de lire ton fichier en binaire (open('fichier.txt', 'rb'))
    Mais alors readlines risque de ne plus fonctionner correctement, il va falloir que tu utilises read.

  5. #5
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut
    Merci oiffrig, en fait j'avais déjà utilisé le rb, mais ca ne marche pas, il faut apparement utilisé rU pour que l'OS le lise en tant que binaire, mais il faut aussi que le fichier ne soit pas spécifié comme texte, or j'avais laissé comme extension de fichier .txt (très malin pas vrai), donc ca ne marchait pas.

    Je laisse mon code, si ca intéresse quelqu'un :

    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
     
    import os
     
    ofi = open('fich_export', 'rU')
    outputfile = open('fich_export2','w')
    string = ""
     
    while 1 :
        char = ofi.read(8)
        if not char  : break
        else:
            if char != "00000000":
                string += char
    outputfile.write(string)
    outputfile.flush()
    outputfile.close()
    ofi.close()

    Bon voilà je suppose qu'il y a de plus belle syntaxe, mais j'en suis relativement content

    Merci pour tout l'aide apporter! En espérant que ça puisse aidé quelqu'un un jour

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

Discussions similaires

  1. problème de lecture fichier
    Par Fahmi06 dans le forum Qt
    Réponses: 1
    Dernier message: 29/10/2007, 09h20
  2. Problème de lecture fichier texte
    Par Draconic dans le forum Visual C++
    Réponses: 1
    Dernier message: 05/08/2007, 18h00
  3. Problème STL lecture fichier texte
    Par Bourrine dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/04/2007, 11h57
  4. [C#-XML] - Problème de lecture fichier XML
    Par Gloups dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/08/2006, 00h40
  5. problème de lecture fichier
    Par Polo40 dans le forum C
    Réponses: 8
    Dernier message: 30/03/2006, 10h58

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