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 :

encodage + fichier unimarc iso2709 [Python 3.X]


Sujet :

Python

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Loisir / Plaisir
    Inscrit en
    Février 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Loisir / Plaisir

    Informations forums :
    Inscription : Février 2012
    Messages : 32
    Par défaut encodage + fichier unimarc iso2709
    Bonjour,

    Le format unimarc permet d'échanger des informations entre les logiciels de bibliothèque.

    J'essaie en vain d'ouvrir un fichier iso2709 (unimarc) qui n'est pas encodé en utf-8 avec python.

    J'utilise pour cela le module pymarc.

    Si le fichier est en utf8 aucun problème, sinon je n'arrive pas avec le module pymarc à spécifier l'encodage utilisé.

    J'ai tenté de faire .decode() en spécifiant l'encodage probable détecté par chardet (iso8859-9) sur la chaine renvoyé par pymarc,
    mais comme le montre l'affichage, l'erreur de décodage est présente.

    je vous joints 2 fichiers unimarc (le premier en utf8 et l'autre en iso8859-?)

    Avez-vous une piste pour m'aider ?

    D'avance merci

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    """
    Détecte le type de fichier et son MIME
    Détecte l'encodage du fichier ISO2709 (unimarc).
    puis
    Afficher le titre si présent en zone 200$a.
     
    avec encodage utf-8 -> cela fonctionne bien
    avec encodage iso8859-x -> KO
     
    test avec chardet (4.0.0)
    test avec pymarc (5.0.0)
     
    argument 1 -> fichier unimarc
    """
     
    import sys
     
    import chardet
    import encodings
    import magic
    from pymarc import MARCReader
     
    def analyse(fichier):
        print("type de fichier : " + magic.from_file(fichier))
        print("type MIME du fichier : " + magic.from_file(fichier, mime = True))
     
        # le compteur de notice
        numnotice = 0
        rawdata = open(fichier, 'rb').read()
        result = chardet.detect(rawdata)
        charenc = result['encoding']
        print ("l'encodage probable est " + charenc)
        with open(fichier, 'rb') as fh:
            if charenc == "utf-8":
                reader = MARCReader(fh, to_unicode=True, force_utf8=True)
            else:
                print("le fichier est analysé avec un encodage en " + charenc)
    #            reader = MARCReader(fh) # PB Unable to parse character 0xa0 in g0=66 g1=69 (7 lignes même message)
                reader = MARCReader(fh, file_encoding='iso8859_9') # affiche le titre mal decodé (par chardet)
    #            reader = MARCReader(fh, file_encoding='iso8859_15') # affiche le titre mal decodé 
    #            reader = MARCReader(fh, file_encoding='cp850') # affiche le titre mal decodé (dos Europe)
    #            reader = MARCReader(fh, file_encoding='cp1252') # affiche le titre mal decodé (Windows Europe)
            for record in reader:
                numnotice += 1
                print("----------------------------")
                print("notice numéro : " + str(numnotice))
                for field in record.get_fields('200'):
                    if field['a'] is not None:
                        if charenc != "utf-8":
                            field = field['a']
                            lenfield=len(field)
                            print("le nombre de caractère du titre est : " + str(lenfield))
                            print("Le titre non decodé est : \033[41m" + field + "\033[0m")
                            try:
                                field2 = field.decode('iso8859_9', errors='strict').encode('utf8', errors='strict')
    #                        field2 = field.decode('iso8859_15').encode('utf8', errors='strict')
    #                        field2 = field.decode('cp850').encode('utf8', errors='strict')
    #                        field2 = field.decode('cp1252').encode('utf8', errors='strict')
                                print("le titres decodé est " + str(field2))
                            except AttributeError:
                              pass
                        # si le titre est en utf8
                        else:
                            print("le titres est \033[1;32m" + field['a'].upper())
                            print("\033[0m")
                    elif field['a'] is None:
                        print('pas de titre en 200$a')
     
     
    if __name__ == "__main__":
        fichier = (sys.argv[1])
        print("le fichier à analyser est : " + fichier)
        analyse(fichier)
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [VB 2005]encodage fichier texte
    Par Mandarine dans le forum VB.NET
    Réponses: 1
    Dernier message: 03/11/2007, 14h43
  2. Encodage fichier ressources
    Par vdelbart dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 16/07/2007, 12h17
  3. [java]Encodage fichier XML avec XMLType
    Par adrien.nicolet dans le forum Oracle
    Réponses: 1
    Dernier message: 08/03/2007, 13h09
  4. [encodage fichier texte]
    Par nyko_kliko dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 28/07/2006, 16h21
  5. [XSL][C++]encodage fichier xml
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2006, 09h45

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