lire un document .odt

Bonjour j'aimerais savoir s'il est possible de lire avec la methode read() un document texte que j'ai sur libre office?Si oui comment? car a chaque fois que j'essaye de le faire j'ai un message d'erreur qui spécifie que j'ai un probleme d'encodage

" File "C:\Users [...] line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 752: character maps to <undefined>"

quand j'essaye avec un mode d'ouverture "rb" j'ai un affichage illisible(en code binaire du coup ,enfin je crois!) de type : "b"PK\x03\x04\x14\x00\x00\x08\x00\x00`%\xb5V^\xc62\x0c'\x00"

es-ce impossible de lire tout autre tye de document différent de .txt?</undefined>

Salut !

Quand tu as un document LibreOffice, c'est un fichier .odt, qui est en fait un fichier zippé contenant plusieurs fichiers XML. C'est pour ça que tu vois un tas de choses bizarres et non lisibles quand tu essaies de le lire avec la méthode read() en mode "rb". Ce n'est pas fait pour être lu comme un fichier texte.

si tu as besoin de lire ou d'extraire du texte depuis un fichier .odt, il y a une bibliothèque pour cela, qui s'appelle python-docx. Tu peux l'installer en utilisant pip:

pip install python-docx

Et voici un petit exemple de comment tu peux l'utiliser:

from docx import Document
doc = Document('tonFichier.odt')  # remplace 'tonFichier.odt' par le nom de ton fichier
for para in doc.paragraphs:
    print(para.text)

Ce code va ouvrir ton document et imprimer chaque paragraphe.

Concernant l'erreur d'encodage, cela arrive quand Python essaye de lire un fichier qui contient des caractères qu'il ne peut pas comprendre avec l'encodage actuel. Pour y remédier, tu peux spécifier l'encodage lors de l'ouverture du fichier. Par exemple, "utf-8" est un choix courant :

with open('tonFichier.txt', 'r', encoding='utf-8') as f:
    text = f.read()

Ça peut arriver sur des fichiers .txt également. Mais dans ton cas c'est vraiment à cause du format .odt dr LibreOffice :)

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.