Lire un document docx avec python3
Résolumamiemando Messages postés 33758 Date d'inscription Statut Modérateur Dernière intervention -
- Pip install python-docx
- Comment ouvrir un fichier docx ? - Guide
- Docx - Guide
- Citizen code python avis - Accueil - Outils
- Install microsoft store - Guide
- Réparer fichier word corrompu docx - Guide
17 réponses
Bonjour,
Je bascule le sujet en résolu (cf #65), @quentin2121 StatutMembrepense ici à le faire à l'avenir comme expliqué ici.
Merci à toutes les personnes (en particulier 633049 et @Diablo76 StatutMembre) qui ont aidé quentin2121 a trouvé la réponse. Ci-dessous un résumé de cette longue discussion.
Résumé du problème
Lire un fichier docx en python3 sous Windows.
Résumé de la solution
- Installer pycharm.
- Créer un nouveau projet dans pycharm.
- Il est recommandé de créer pour le projet un environnement virtuel qui utilise l'interpréteur python 3.11, car python 3.12 pose actuellement des problèmes.
- Si python3.11 n'est pas installé, voir #59 pour voir comment procéder.
- Installer python-docx. Attention à ne pas installer docx, mais python-docx ce lien). Deux méthodes sont possibles
- via le menu Python Package de pycharm
- via le terminal (shell) (pas dans l'interpréteur python !) de pycharm, en invoquant soi-même pip :
-
python -m pip install --upgrade pip # Mise à jour de pip pip install python-docx # Installation du paquet
-
- En cas d'erreur pip, en particulier :
When import docx in python3.3 I have error ImportError: No module named 'exceptions'
... il faut envisager d'utiliser une autre version de python, par exemple python 3.11. L'erreur ci-dessus impacte (actuellement) python3.12.
Bonne chance et merci à tou.te.s
En bas à droite de Pycharm, tu vois l'interpréteur utilisé (dans ma capture 3.11)
Tu cliques dessus et tu peux voir tous les interpréteurs installés (dans ma capture 3.9 et 3.11) ainsi que des menus pour configurer tout ça.
Là, soit tu choisis 3.11, soit tu l'installes si ce n'est pas fait et ça sera OK au moins pour ton projet en cours.
Comme on te l'a déjà dit, Pycharm crée un environnement virtuel par projet. Toutes les dépendances du projet sont dans cet environnement (Par exemple docx si tu l'installes, ne sera accessuble que de ce projet, depuis un autre il faudre l'installer à nouveau).
Mais il y a des paramètres qui sont globaux à Pycharm, et je ne connais pas suffisamment cet IDE pour t'affirmer que l'interpréteur est global ou ne l'est pas.
Mais comme il est écrit Python 3.11 (SAGC) qui est le nom de mon projet, j'ai tendance à penser que ce n'est pas un paramètre global.
import docx doc = docx.Document # doc.read("L'ANGE GABRIEL")
En fait l'erreur c'est peut être que mon document est sur le disque D, comment y faire accéder à pyhton ?
en rentrant cd dir en ligne 2 ?
J'ai ajouté mon document dans PythonProject de Pycharm via l'explorateur de fichier Windows sur le disque C, cela ne fonctionne pas mieux.
Dans mes cours le module docx est déjà installé dans pycharm, car on ne l'ajoute pas au départ de l'exercice.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour,
Peu importe où le fichier est situé, met le chemin:
import docx doc = docx.Document("C:\\Phil\\Dev\\Python\\tests\\Word_test.docx") for para in doc.paragraphs: print('Paragraphe:\n',para.text)
import docx doc = docx.Documents("C:\Users\quent\PycharmProjects\pythonProject\L'ANGE_GABRIEL.docx")
J'ai cette erreur :
doc = docx.Document("C: \Users\quent\PycharmProjects\pythonProject\L'ANGE_GABRIEL.docx")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
J'ai fais cela, mais toujours des erreurs
On m'as appris à faire comme cela :
import docx
doc = docx.Document()
# doc.add_paragraph("hello word")
doc.save("hello word.docx")
paraObj1 = doc.paragraph ("deuxième paragraphe")
paraObj2 = doc.paragraph ("troisième paragraphe")
paraObj1.add_run("texte additionnel")
doc.save'"paragraphes_multiples.docx")
Bonsoir,
En programmation, quand on a des erreurs, il faut les indiquer ces erreurs, python est super pour ça, donc poste le traceback complet des erreurs, et surtout pas d'images, du simpe texte est amplement suffisant.
Tu devrais sans doute suivre un didacticiel concernant ce module, parce que là, tu as l'air de complètement patauger.
Par ex. celui-ci :
https://www.geeksforgeeks.org/python-working-with-docx-module/
(il y a d'autres tutos en bas de page concernant ce module)
Ou encore :
https://stackabuse.com/reading-and-writing-ms-word-files-in-python-via-python-docx-module/
Bonne chance.
Bonjour,
As-tu essayé ceci :
import docx doc = docx.Documents("C:/Users/quent/PycharmProjects/pythonProject/L'ANGE_GABRIEL.docx")
File "C:\Users\quent\PycharmProjects\pythonProject\l'ange gabriel.py", line 1, in <module>
import docx
File "C:\Users\quent\PycharmProjects\pythonProject4\venv\Lib\site-packages\docx.py", line 21, in <module>
from PIL import Image
File "C:\Users\quent\PycharmProjects\pythonProject4\venv\Lib\site-packages\PIL\Image.py", line 39, in <module>
import tempfile
File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\tempfile.py", line 45, in <module>
from random import Random as _Random
File "C:\Users\quent\PycharmProjects\pythonProject\random.py", line 2
générer un chiffre aléatoire(1-10)
^^
SyntaxError: invalid syntax
J'en viens à me demander si j'ai bien le module docx d'installé sur Pycharm ? Quel chemin ou commande console pour le voir SVP ?
Bonjour,
Personne pour m'aider, je suis dans une impasse là ?
Petits rappels:
- On est bénévole
- Nos vies passent avant toute aide sur le forum
- Quand nous te posons des questions pour mieux cerner ton problème, tu ne réponds pas forcément rapidement, quand tu réponds...
Donc si tu veux continuer à obtenir de l'aide de notre part, un peu de patience et de respect.
A priori oui le module est installé dans l'environnement virtuel de ton projet, on voit dans la pile d'appel que l'erreur passe par
File "C:\Users\quent\PycharmProjects\pythonProject4\venv\Lib\site-packages\docx.py",
Puis si on continue à suivre la pile, ça veut utiliser le mondule Random.
Je n'ai pas vérifié et je n'ai pas le temps maintenant, mais le chemin d'appel me surprend.
N'aurais-tu pas eu la mauvaise idée d'écrire ton propre module random, avec un bug dedans?
Sur mon PC qui dispose de Pycharm, j'ai bien 2 fichiers qui s'appellent random.py mais
- ils ne sont pas rangés dans un dossier qui ressemble à un dossier perso
- les commentaires ne sont pas en français.
Je reformule donc ma question, est-ce toi qui as écrit le fichier "C:\Users\quent\PycharmProjects\pythonProject\random.py"
Alors pour une raison que j'ignore pycharm crois que le module random c'est ton fichier et pas celui d'origine.
Il faut faire en sorte que le vrai soit pris en compte, peut-être le réinstaller.
Quand à
J'ai recopié que le début du code, j'ai une erreur avec "syntax error" sur la ligne 2.
oui c'est doublement évident, d'abord parce que dans ton autre programme c'est exactement ce que te dit le message d'erreur. Et de plus un commentaire ça commence par #.
J'ai supprimé le fichier Random.py dans mon explorateur Windows (après l'avoir sauvegardé ailleurs), puis en testant mon code L'ANGE_GABRIEL.py, encore des erreurs :
File "C:\Users\quent\PycharmProjects\pythonProject\L'ANGE_GABRIEL.py", line 1, in <module>
import docx
File "C:\Users\quent\PycharmProjects\pythonProject4\venv\Lib\site-packages\docx.py", line 30, in <module>
from exceptions import PendingDeprecationWarning
ModuleNotFoundError: No module named 'exceptions'
Sinon avec quelle commande dans la console réinstaller Random ?
Bonjour,
Je n'ai pas tout lu, donc mes excuses si ce que je dis est une redite :
- Comme expliqué dans ce lien, pour des versions modernes de python, il faut installer python-docx et non docx. Cela résoudra l'erreur que tu mentionnes dans #28.
pip remove docx pip install python-docx
- Concernant #26 et le nommage de ta fonction
- Un nom de fonction python ne doit pas comporter d'espace.
- Je déconseille très fortement l'utilisation de caractères non ASCII (typiquement des caractères accentués). Donc renomme ta fonction "générer un nombre aléatoire" en "generer_un_nombre_aleatoire". Si tu voulais vraiment utiliser des caractères unicode il faudrait que ton fichier débute par l'entête adéquate. Exemple :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- def f(): print("Hello world")
- Je recommande de nommer ses fonctions en anglais, ça permet de prendre de bonnes habitudes pour plus tard et on n'utilise de facto plus de caractères accentués.
- Dans ton cas particulier, la fonction que tu cherches à implémenter est probablement random.randint.
from random import randint n = randint(1, 10) # 1 <= n <= 10
- Plutôt que de faire des captures d'écran de ta pile d'appel, copie-colle la et dans son intégralité (comme tu l'as fait dans #28). Merci également de la mettre dans un section de code comme expliqué ici.
Bonne chance
File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\code.py", line 63, in runsource code = self.compile(source, filename, symbol) File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\codeop.py", line 153, in __call__ return _maybe_compile(self.compiler, source, filename, symbol) File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\codeop.py", line 73, in _maybe_compile return compiler(source, filename, symbol)
pip list :
File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\code.py", line 63, in runsource code = self.compile(source, filename, symbol) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\codeop.py", line 153, in __call__ return _maybe_compile(self.compiler, source, filename, symbol) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\codeop.py", line 73, in _maybe_compile return compiler(source, filename, symbol) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\quent\AppData\Local\Programs\Python\Python312\Lib\codeop.py", line 118, in __call__ codeob = compile(source, filename, symbol, self.flags, True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<input>", line 1 pip list ^^^^
Peut être Pycharm bug, il faudrait peut être le desinstaller, réinstaller ? En sauvegardant mes projets ?
J'ai ouvert avec PyCharm un projet dans lequel j'ai docx.
Avec le gestionnaire de package (comme te l'a montré @Diablo76 StatutMembre), je le vois dans la liste des composants installés
Est-ce que tu le vois ?
Je te demande ça parce que plus haut ta trace d'erreur semblait passer par ce package. Alors peut-être que ce n'était pas le bon package comme l'a suggéré @mamiemando StatutModérateur
Dans ce cas, peut-être faudrait-il le désinstaller d'abord.
A droite du gestionnaire de package, tu peux cliquer sur les 3 points
Sinon dans le terminal de Pycharm (comme te l'a aussi montré Diablo), avec pip list, tu peux aussi voir les packages installés sur ton projet.
Pour en être sûr, tu dois voir
(venv) suivi du chemin de ton projet
Et les commandes d'install t'ont déjà été données, celle de désinstall
pip unstall docx
Quand je fais pip list dans le terminal, j'ai :
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Scripts\pip.exe\__main__.py", line 4, in <module>
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\cli\main.py", line 9, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\cli\autocompletion.py", line 10, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\cli\main_parser.py", line 8, in <module>
from pip._internal.cli import cmdoptions
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\cli\cmdoptions.py", line 23, in <module>
from pip._internal.cli.parser import ConfigOptionParser
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\cli\parser.py", line 12, in <module>
from pip._internal.configuration import Configuration, ConfigurationError
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\configuration.py", line 20, in <module>
from pip._internal.exceptions import (
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_internal\exceptions.py", line 7, in <module>
from pip._vendor.pkg_resources import Distribution
File "C:\Users\quent\PycharmProjects\pythonProject1\venv\Lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2164, in <module>
register_finder(pkgutil.ImpImporter, find_on_path)
^^^^^^^^^^^^^^^^^^^
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
Le problème semble lié à python3.12 (voir ici). Cette discussion suggère de repasser soit en python3.11, soit d'adopter cette solution.
Merci à Whismeril, goulu et mamiemando de vous intéresser à mon problème. J'ai désinstaller python 3.12 et installé python 3.11. Quand je fais pip install python-docx, j'ai :
(venv) PS C:\Users\quent\PycharmProjects\pythonProject> pip install python-docx
No Python at '"C:\Users\quent\AppData\Local\Programs\Python\Python312\python.exe'
(venv) PS C:\Users\quent\PycharmProjects\pythonProject>
Python est installé dans le C de app data, local, lors de l'install, au tout départ, j'ai coché "installe the path", en bas, une option, cela viendrait'il de là ?
Bonjour Mamiemando,
Merci d'avoir clos le sujet. Mais je ne l'avais pas fais car j'ai encore des questions. J'ai installé pyinstaller sur mon pc, pour exécuter des projets python depuis n'importe quels pcs non équipé de python. Cela fonctionne pour d'autres fichiers, mais pas pour l'ange_gabriel ?
En fait, dans Pycharm il s'ouvre bien avec les lignes que j'ai indiqué dans le projet, mais je voulais que tout le contenu du fichier texte s'ouvre dans la console d'excécution de Pycharm ! Puis sur un pc après l'avoir fait cheminer vers pyinstaller.
Faut-il ajouter d'autres lignes de code pour qu'il s'affiche dans Pycharm ? Sera t-il possible d'en faire un fichier .exe via pyinstaller . Merci encore pour l'aide !
Bonjour quentin2121 : cette question n'est pas en rapport direct avec le sujet initial, et donc il faut poser ta question dans une nouvelle discussion si tu veux plus de détails. Mais dans l'idée, soit la machine cible a un interpréteur python et les dépendances nécessaires au sujet, soit il faut transformer ton projet en exécutable "stand alone" par exemple avec pyinstaller.