Lire un document docx avec python3
RésoluBonjour,
Je débute aussi en doc, je veux lire un fichier word dans python :
import docx
doc = docx.Document("L'ANGE GABRIEL")
print (read(doc))
ModuleNotFoundError: No module named 'docx'
Ou est l'erreur ? Merci.
Windows / Firefox 124.0
“Impose ta chance, serre ton bonheur et va vers ton risque. A te regarder, ils s’habitueront.” René Char
17 réponses
Lire un fichier Word (.docx) en Python échoue avec l'erreur ModuleNotFoundError: No module named 'docx', ce qui montre que le paquet nécessaire n’est pas installé ou n’est pas accessible dans l’environnement actif. La solution consiste à installer python-docx et non docx, via python -m pip install --upgrade pip puis pip install python-docx, ou en passant par l’IDE pour gérer un environnement virtuel dédié. Des recommandations ajoutent d’utiliser Python 3.11 pour éviter les problèmes de compatibilité avec Python 3.12 et de vérifier l’interpréteur du projet (par exemple PyCharm) afin que l’installation soit effective.
-
Modérateur
Bonjour,
Je bascule le sujet en résolu (cf #65), pense ici à le faire à l'avenir comme expliqué ici.
Merci à toutes les personnes (en particulier 633049 et ) 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.
-
-
@quentin2121
Oui, tu peux ajouter un interpréteur à ton projet existant via le menu "Add new interpreter"
Ensuite, tu sélectionnes ton projet existant et tu renseignes le chemin de python 3.11 (C:\Utilisateurs\quent\AppData\Local\Programs\Python\Python311)
-
@Diablo76
Une fois sur le chemin de C:\Users\quent\AppData
Je ne peux aller plus loin, et cliquer sur Ok pour valider le chemin ?
-
@quentin2121
En gros Pycharm ne veut pas prendre Python 311 ! Peut être parce que souvent on installe d'abord python, puis pycharm ?
-
-
Tu as installé le module sur ton PC?
-
Quelle erreur ?
-
-
@quentin2121
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.
-
-
Bonjour,
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)-
-
@quentin2121
Je veux juste que le texte s'affiche dans Pycharm, se lis, "read", enfin si c'est possible !
Il faut rentrer le chemin vers Pycharm ?
-
-
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
-
-
@jee pee
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")
-
@quentin2121
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.
-
Contributeur@goulu
Bonsoir goulu,
En espérant que Quentin suivra vos excellents conseils.
Pour ce qui est des interlignes, c'est un bug non corrigé depuis plus d'un an, ce me semble, qui affecte les posts en commentaire.
Il suffit de faire un shift + enter pour générer l'interligne -
@georges97
Ah d'accord, merci de l'info, je ne savais pas ;)
-
-
Bonjour,
As-tu essayé ceci :
import docx doc = docx.Documents("C:/Users/quent/PycharmProjects/pythonProject/L'ANGE_GABRIEL.docx")-
-
@quentin2121
Au risque de répéter ce qui t'a déjà été demandé par goulu
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
-
@Utilisateur anonyme
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?
-
@Utilisateur anonyme
Excusez moi de mon impatience à résoudre mon problème.
Je n'ai rien fait dans le module Random, à part l'utiliser lors de mes cours en exercices pour le découvrir.
Merci de vous intéresser à mon sujet, bon dimanche !
-
-
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 ?
-
-
Modérateur
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) -
-
Modérateur@quentin2121
La trace me paraît incomplète. Au pire, regarde si docx est installé (avec pip list). Puis installe python-docx avec pip install python-docx.
Bonne chance
-
@mamiemando
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 ^^^^ -
Modérateur@quentin2121
Vu l'erreur, j'ai l'impression que tu tapes tes commandes pip dans un script python, alors qu'il faut les taper dans un terminal (par exemple, les commandes MS-DOS ou l'onglet terminal si ton IDE en propose un).
- 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.
-
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é ), 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é
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 projetEt les commandes d'install t'ont déjà été données, celle de désinstall
pip unstall docx
-
-
@quentin2121
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'?
-
@quentin2121
Ok, Effectue l'update de tes packages en cliquant sur les liens et réessaie l'install de python-docx :
-
@quentin2121
Bonjour quentin.
Désolé pour toi, mais tu as une version trop récente de python XD , il va falloir tout recommencer en utilisant une version antérieure.
https://stackoverflow.com/questions/77364550/attributeerror-module-pkgutil-has-no-attribute-impimporter-did-you-mean#answer-77364602
-
@goulu
Effectivement tu sembles avoir trouvé la cause.
Mais selon le post, il ne faut pas changer de version de python, mais mettre à jour pip manuellement
-
-
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à ?
-
-
@Diablo76
Merci à toi aussi de m'aider. En fait il faut renseigner dans Pycharm la version de python ? Ou pour chaque projet, clic droit, paramètre ?
-
-
Et si tu copies colle le chemin dans la zone de texte de la fenêtre d'exploration?
-
-
-
@quentin2121
Ah j'ai réussi en passant par le package de Pycharm, j'ai installé python-docx, ENFIN !
-
-
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 !
-
Modérateur
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.
-
















