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

Bibliothèques tierces Python Discussion :

chargement (load) d'un document odf avec Python 2.7 et odfpy


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre à l'essai Avatar de ch20100
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 12
    Points
    12
    Par défaut chargement (load) d'un document odf avec Python 2.7 et odfpy
    Bonjour,
    J'ai écrit un programme (assez long) en Python qui fonctionnait très bien jusqu'à cette semaine.
    Le programme fait appel à la bibliothèque odfpy pour ouvrir un fichier .ods (au tout début).

    Depuis la mise à jour vers Ubuntu 15.04 (je pense) j'ai un message d'erreur (avec LibreOffice 4.4.2.2). Voici le code minimal qui provoque l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from odf.opendocument import load     # pour charger un document
    f = open('notes.ods')
    L'erreur est
    Traceback (most recent call last):
    File "/home/christian/workspace2/D3D5-2015/corrige.py", line 478, in <module>
    feuilleNotes = load("notes.ods")
    File "/usr/lib/python2.7/dist-packages/odf/opendocument.py", line 960, in load
    assert(type(odffile)==type(u"") or 'rb' in repr(odffile) or 'BufferedReader' in repr(odffile) or 'BytesIO' in repr(odffile))
    AssertionError


    Note 1 : vous pouvez trouver la bibli à cette adresse https://pypi.python.org/pypi/odfpy
    Pour l'installer (il faut Python 2.7), après décompression, on exécute en 'sudo' dans une console

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo python setup.py install
    Note 2 : tous les exemples trouvés sur internet avec odfpy qui fonctionnaient avant, ne fonctionnent plus !!!

    Note 3 : J'ai réinstallé un Ubuntu 14.04 LTS sur un autre (vieil) ordinateur avec Python 2.7, Libreoffice 4.2.8.2 et la bibliothèque odfpy.
    Le code précédent fonctionne bien !

    Merci de votre aide

  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,

    Le code d'odfpy étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def load(odffile):
        """
        Load an ODF file into memory
        @param odffile unicode string: name of a file, or as an alternative,
        an open readable stream
        @return a reference to the structure (an OpenDocument instance)
        """
        assert(type(odffile)==type(u"") or 'rb' in repr(odffile) \
                   or 'BufferedReader' in repr(odffile)  or 'BytesIO' in repr(odffile))
    écrire load("notes.ods") sous Python2 plantera à tous les coups: "notes.ods" n'est pas Unicode et ne vérifie aucune des autres conditions.

    Je suspecte qu'avec la version d'Ubuntu, vous avez aussi changé de version d'odfpy.
    Pour le vérifier, regardez le source de la fonction load du module /usr/lib/python2.7/dist-packages/odf/opendocument.py.

    Une autre cause peut être l'oubli d'un "from __futures__ import unicode_literals".

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

  3. #3
    Membre à l'essai Avatar de ch20100
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    écrire load("notes.ods") sous Python2 plantera à tous les coups: "notes.ods" n'est pas Unicode et ne vérifie aucune des autres conditions.
    Vous avez tout à fait raison. Tellement persuadé (mon code fonctionnait il y a peu) que l'erreur ne venait pas de moi, je n'ai pas décortiqué l'erreur.
    J'ai ajouté
    et ça marche très bien.

    Je suspecte qu'avec la version d'Ubuntu, vous avez aussi changé de version d'odfpy.
    Pour le vérifier, regardez le source de la fonction load du module /usr/lib/python2.7/dist-packages/odf/opendocument.py.
    J'avais déjà été voir ce fichier. J'ai réinstallé hier odfpy et la version n'a pas bougée depuis environ 1 an.

    Une autre cause peut être l'oubli d'un "from __futures__ import unicode_literals".
    Merci de me préciser (brièvement) le rôle de cette ligne et les conséquences de son oubli.

    Je vais enfin pouvoir avancer, je reviens vers vous (pour mettre résolu) quand tout est ok. Un immense merci (j'ai plus de 3700 documents à traiter avec mon programme...)
    Bien cordialement

  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,

    La version 0.9.3 est relativement ancienne: le changelog du site de developpement mentionne:
    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
    1.3
    	A new edition of odfpy to support Python3.
     
    	This version has been reworked by Georges Khaznadar <georgesk@debian.org>,
    	to add Python3 support.
     
    1.2
    	Support ODF 1.2
     
    past 0.9
    	Made sure userfield.py works with OpenOffice.org 3.x files.
    0.9
    	Updated to ODF version 1.1
    0.8
    	Added the ability to load a document.
    0.7
    	Refactored command-line tool odfuserfied into odf.userfield as a
    	library and adapted odfuserfied to use this library.
     
    0.6.1
    	TODO: collect changes from svn check-in messages
     
    0.6
    	Implemented subobjects.
    La version 1.3 est disponible depuis octobre 2014.

    "from __future__ import unicode_literals" vous donnera toutes les réponses à la question associée.
    Mais si vous ignorez la chose, c'est que la cause est "ailleurs".
    Revisitez la version d'odfpy que vous utilisez car si vous êtes passé d'un coup de la version 0.9 à la version 1.3 vous risquez d'avoir d'autres problèmes.

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

  5. #5
    Membre à l'essai Avatar de ch20100
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Vous aviez raison. L'ouverture des fichiers se font mais pas tous... et j'ai d'autres erreurs...
    J'ai des erreurs incompréhensibles. un odt s'ouvre, un ods s'ouvre et sur le 3e fichier odt j'ai une erreur !
    J'ai donc remarqué comme vous l'aviez vu que j'avais maintenant la version 1.2 (je crois) de odfpy d'installé. Je l'ai désinstallé pour la version 2.7 et j'ai lancé une installation de la version 0.9.6 que j'utilisais mais j'ai un autre problème...
    La version précédente était dans /usr/lib/python2.7/dist-packages/odf mais maintenant ce répertoire est vide.
    L'installation (bizarre) m'a renvoyée ceci
    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
     christian@HPFolio13CV:~/Téléchargements/odfpy-0.9.6$  sudo /usr/bin/python2.7 setup.py install
    running install
    running build
    running build_py
    running build_scripts
    running install_lib
    running install_scripts
    changing mode of /usr/local/bin/odflint to 775
    changing mode of /usr/local/bin/odfoutline to 775
    changing mode of /usr/local/bin/odf2xml to 775
    changing mode of /usr/local/bin/csv2ods to 775
    changing mode of /usr/local/bin/odf2xhtml to 775
    changing mode of /usr/local/bin/odfimgimport to 775
    changing mode of /usr/local/bin/mailodf to 775
    changing mode of /usr/local/bin/odfuserfield to 775
    changing mode of /usr/local/bin/xml2odf to 775
    changing mode of /usr/local/bin/odfmeta to 775
    changing mode of /usr/local/bin/odf2mht to 775
    running install_data
    running install_egg_info
    Removing /usr/local/lib/python2.7/dist-packages/odfpy-0.9.6.egg-info
    Writing /usr/local/lib/python2.7/dist-packages/odfpy-0.9.6.egg-info
    et maintenant la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from odf.opendocument import load
    ne fonctionne plus.
    Je pense que l'installation est mauvaise mais comment faire, si vous avez une idée.
    PS : j'ai regardé from __future__ import unicode_literals mais comme je ne l'utilisais pas...

  6. #6
    Membre à l'essai Avatar de ch20100
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour aux lecteurs
    Le problème est résolu après des heures...
    L'installation de odfpy 0.9.6 avec la commande précédente avait eu lieu dans
    /usr/local/lib/python2.7/dist-packages/odf/
    J'ai donc recopié le contenu avec sudo dans
    /usr/lib/python2.7/dist-packages/odf/
    et tout s'est remis à fonctionner. ouf ! (le temps qu'Eclipse ne voit l'erreur)

    En résumé, un programme écrit en Python 2.7 ne fonctionne pas avec odfpy 1.2x installé avec Ubuntu 15.04.
    Il faut désinstaller les 4 paquets python-odf-doc, python-odf, python-odf-tools, python3-odf (si deux versions de Python)
    et installer comme je l'ai fait odfpy0.9.6 qui se trouve ici.

    Un grand merci à wiztricks qui m'a mis sur la voie de cette incompatibilité.

    PS : mes essais avec Python 3.4 n'ont pas été concluant, d'autres erreurs...

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

Discussions similaires

  1. Chargement d'une page (jQuery : .load) puis suite de commande avec une div
    Par IceBlackSanctum dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/05/2015, 12h55
  2. generer documentation du code python avec Sphinx
    Par nancy maman dans le forum Général Python
    Réponses: 2
    Dernier message: 23/09/2011, 16h25
  3. Chargement d'un XML en tables avec PL/SQL
    Par jenlin dans le forum PL/SQL
    Réponses: 7
    Dernier message: 21/03/2011, 12h55
  4. création de base mySQL avec python
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 23/06/2006, 19h38
  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