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 :

problème encodage fichier pdf


Sujet :

Python

  1. #1
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut problème encodage fichier pdf
    Bonjour,
    Encore un problème d'encodage !
    Je sais que le problème a déjà été soulevé plusieurs fois mais je rencontre des difficultés.

    Je travaille sous ubuntu avec python2.7 à cause de pyPdf que je n'arrive pas à installer pour python3.

    Voici mon code qui cherche à imprimer la première page d'une liste de fichiers pdf dans un fichier tex :

    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
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import codecs
    from pyPdf import PdfFileReader
    import os
     
    chemin='/media/marco2/113A293E768D5BA6/scilab/scilab_web/'
    liste1=os.listdir(chemin)
    liste2=[]
     
    for fich in liste1:
    	if fich.endswith(".pdf"):
    		liste2.append(fich)
     
    f = codecs.open("liste3.tex","wb",encoding='utf8')
     
    for fichier in liste2:
    	print (fichier)
    	entree = PdfFileReader(file(chemin+fichier, "rb"))
    	page1 = entree.getPage(0)
    	txt=page1.extractText()
    	print (txt)
    	f.write(fichier)
    	f.write("\\")
    	f.write(txt)
     
    f.close()
    Voici le message d'erreur après avoir affiché tout le texte de la première page de plusieurs fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    2-Entrées sorties.pdf
    Traceback (most recent call last):
      File "recherche-titre1.py", line 24, in <module>
        f.write(fichier)
      File "/usr/lib/python2.7/codecs.py", line 691, in write
        return self.writer.write(data)
      File "/usr/lib/python2.7/codecs.py", line 351, in write
        data, consumed = self.encode(object, self.errors)
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 6: ordinal not in range(128)
    Si quelqu'un a une idée...
    Pas d'aide par mp.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Ca pete sur:
    Or fichier sort de liste2 construite par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    chemin='/media/marco2/113A293E768D5BA6/scilab/scilab_web/'
    liste1=os.listdir(chemin)
    liste2=[]
     
    for fich in liste1:
    	if fich.endswith(".pdf"):
    		liste2.append(fich)
    Sous Python2, os.listdir retourne des bytes si le chemin est exprime en bytes et de l'unicode si le chemin est u'...'.
    => ecrivez chemin=u'/media/marco2/113A293E768...'

    Apres je ne comprends pas le pourquoi de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = codecs.open("liste3.tex","wb",encoding='utf8')
    soit vous écrivez de bytes et pas la peine de préciser l'encoding soit vous écrivez du texte....

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

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Sous Python2, os.listdir retourne des bytes si le chemin est exprime en bytes et de l'unicode si le chemin est u'...'.
    => ecrivez chemin=u'/media/marco2/113A293E768...'

    Apres je ne comprends pas le pourquoi de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = codecs.open("liste3.tex","wb",encoding='utf8')
    soit vous écrivez de bytes et pas la peine de préciser l'encoding soit vous écrivez du texte....

    - W
    Je crois que je n'ai pas très bien compris l'histoire des bytes et du texte.
    Je vais me pencher sur ce problème.
    Votre ajout fonctionne très bien et je vous remercie.
    Je souhaite du texte pour travailler sur le fichier externe codé en utf8.
    Merci encore !
    Pas d'aide par mp.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    En 2.7, il est préférable d'utiliser le module io plutôt que le module codecs. Ca aurait rale plus tot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> f = io.open('toto.dat', 'wb', encoding='utf-8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: binary mode doesn't take an encoding argument
    Mais open n''aurait pas apprécié non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> f = io.open('test2.dat', 'wb', encoding='utf-8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: binary mode doesn't take an encoding argument
    Je ne sais pas ce que codecs fait dans ce cas la.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci,
    Je ne connais pas le module "io".

    En fait, les premières pages e mes fichiers sont trop longues et j'aurais souhaité extraire par exemple les 3 ou 4 premières lignes.
    Dans le code suivant, tout marche mais pas l'avant-dernière ligne : celle où j'ai mis un #.
    Je ne comprends pas trop mais c'est encore une histoire d'encodage apparemment (je peux mettre le message d'erreur si besoin).

    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
     
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
     
    # en python 2.7
     
     
    import codecs
    from pyPdf import PdfFileReader
    import os
     
    # chemin=u'/media/marco2/113A293E768D5BA6/scilab/scilab_web/'
    chemin=u'../'
    liste1=os.listdir(chemin)
    liste2=[]
     
    for fich in liste1:
    	if fich.endswith(".pdf"):
    		liste2.append(fich)
     
    f = codecs.open("final.tex","wb",encoding='utf8')
    N=4
     
    for fichier in liste2:
    	entree = PdfFileReader(file(chemin+fichier, "rb"))
    	page1 = entree.getPage(0)
    	txt=page1.extractText()
    	# print (txt)
    	# print (fichier)
    	g = codecs.open("temp.tex","wb",encoding='utf8')
    	g.write(fichier)
    	g.write("\n")
    	g.write(txt)
    	g.close()
    	with open("temp.tex", 'r') as sortie:
    		for ligne in(0,N):
    			data=sortie.readline()
    			print data
    			# f.write(data)
     
    f.close()
    Pas d'aide par mp.

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Résolu en changeant la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sortie = codecs.open("temp.tex","r",encoding='utf8')
    	for ligne in(0,N):
    		data=sortie.readline()
    		print data
    		f.write(data)
    Pas d'aide par mp.

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

Discussions similaires

  1. Problème encodage fichier CSV
    Par Idleman dans le forum ASP.NET
    Réponses: 4
    Dernier message: 15/10/2012, 07h37
  2. Problème génération fichier PDF
    Par jobez dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/11/2011, 23h23
  3. Problème affichage fichier PDF
    Par kroy0wen dans le forum Débuter
    Réponses: 13
    Dernier message: 08/07/2011, 22h07
  4. Problème ouverture fichier pdf
    Par rorobase dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/10/2008, 10h29
  5. Problème traduction fichier pdf binaire en héxa (0D 0A)
    Par identifiant_bidon dans le forum C++
    Réponses: 2
    Dernier message: 22/11/2007, 10h37

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