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 :

Fichier '.db', un problème d'encodage ? [Python 3.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Fichier '.db', un problème d'encodage ?
    Bonjour,

    Pour inaugurer mon arrivée sur le forum, je vous présente sans plus attendre un problème qui m'occupe depuis déjà quelques temps et que, malgré ma ténacité, je n'arrive pas régler. Je précise que je ne sais pas vraiment dans quelle section poster ce message, aussi tout déplacement vers une autre section est le bienvenu.

    Tout cela semble simple au premier abord : il s'agit de récupérer des données -sous forme de tableau- depuis un fichier .db. Pour ce faire, j'utilise le module pickle dans le programme suivant :

    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 pickle
    import numpy as np
     
    directory = 'Mon_path'
    n_species = np.array(["H2O"])
     
    section = np.zeros((n_species.size,22,17,867))
     
    for i in range(n_species.size) :
     
        pick = pickle.load(open('%s%s.db'%(directory,n_species[i])))
     
        section[i,:,:,:] = pick["xsecarr"]
     
    bande_sample = pick['wno']
    P_sample = pick['p']
    T_sample = pick['t']
    Ce qui renvoie l'erreur suivante :

    'str' does not support the buffer interface
    J'ai par ailleurs tenté de résoudre le problème en ajoutant un argument 'br' à la fonction 'open' ce qui provoque une erreur différente :

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xa4 in position 2169: ordinal not in range(128)
    Il semblerait que le problème ne vienne pas directement d'une bévue dans le raisonnement qui me fait écrire ce programme, mais bien d'un soucis de compatibilité qui me dépasse largement et que je ne saurais comprendre seul. Je vous demande donc, avec le sincère espoir d'une réponse experte, de bien vouloir vous pencher avec moi sur cette erreur dérangeante et de vous enfoncer mollement dans les méandres farfelus qui font de mon crâne une chaudière sous pression.

    Je vous remercie d'avance,
    Bien à vous,
    Olbers.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Lorsque Python râle, il affiche une ou plusieurs lignes qui permettent de comprendre où a été levée l'erreur. Si vous ne les joignez pas à votre message, on peut se prendre le chou à imaginer ce qui a bien pu se passer.
    Ceci dit, le plus simple dans ce cas est de lancer la console Python et de voir ce qu'il se passe lorsqu'on essaie de lire un fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import pickle
    >>> f = open('nom_de_fichier_à_choisir.db', 'rb')
    >>> pickle.load(f)
    Les fichiers passés à pickle.load doivent avoir été ouverts avec l'option "rb".

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Comme je l'indique dans mon message initial l'utilisation d'un argument 'rb' tel que suit :

    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
    directory = "E:\other\\"
     
    n_species = np.array(["H2O"])
     
    section = np.zeros((n_species.size,22,17,867))
     
    for i in range(n_species.size) :
     
        pick = pickle.load(open(directory + n_species[i] + '.db', 'rb'))
     
        section[i,:,:,:] = pick["xsecarr"]
     
    bande_sample = pick['wno']
    P_sample = pick['p']
    T_sample = pick['t']
    provoque tout de même une erreur que je retranscris ci-après dans son intégralité :

    Traceback (most recent call last):
    File "E:\other\TIPE Version Liste.py", line 721, in <module>
    pick = pickle.load(open(directory + n_species[i] + '.db', 'rb'))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xa4 in position 2169: ordinal not in range(128)
    Et votre proposition renvoie, de même :

    Traceback (most recent call last):
    File "<tmp 2>", line 3, in <module>
    pickle.load(f)
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xa4 in position 2169: ordinal not in range(128)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Avec quelle version de Python avez vous généré le fichier .db?
    Essayez avec pickle.load(f, encoding='latin-1').

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bon ! Hé bien, vous êtes décidément mieux informé que moi car, votre proposition marche !

    *Un long soupir exhale une affligeante frustration et le visage, fendu d'un large sourire, se pare d'un halo éclatant de bonheur.*

    Merci à vous !

    P-S : Le fichier .db n'était pas de ma création, ce qui compliquait effectivement son exploitation car je n'en connaissais pas les caractéristiques.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Olbers Voir le message
    Bon ! Hé bien, vous êtes décidément mieux informé que moi car, votre proposition marche !
    Ça fonctionne parce que "latin-1" associe n'importe quel octet dans 0..255 à un caractère unicode.
    D'autres encodings sont moins prolixes (exemple: "ascii" qui ne sait décoder que les octets dans 0..127).
    Mais si l'encoding n'était pas "latin-1", ce qui apparaîtra à l'écran (lors d'un "print") pourra être différent du rendu attendu.

    - 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. Réponses: 1
    Dernier message: 05/01/2023, 17h56
  2. python et fichier .CSV
    Par billyrose dans le forum Général Python
    Réponses: 7
    Dernier message: 22/07/2008, 07h53
  3. Python, portable, fichiers jar
    Par lozeu dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 13/07/2008, 12h26
  4. python et fichier mdb
    Par hercule4 dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 17/04/2007, 17h58
  5. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40

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