1
resposta

Leitura de arquivos docx

Olá, estou tentando fazer leitura de um arquivo no formato word com o seguinte código.

with open(relatorio, 'r', encoding='utf-8') as relat:
  relatorio = relat.read()
  print(relatorio)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte

Sei que há libs específicas para esse proposito, porém, nesse momento pretendo usar apenas as formas "nativas" do python para leitura de arquivos, se for possível.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Rogério. Tudo bem?

É possível sim ler um arquivo .docx utilizando bibliotecas padrão do Python, ou seja, formas "nativas" que dispensam a necessidade de instalar módulos externos.

O conteúdo dos arquivos .docx é armazenado no formato XML por debaixo dos panos. Levando isso em consideração, podemos usar módulos e ferramentas da biblioteca padrão do Python para manipular o texto do nosso arquivo .docx.

Uma forma de fazer isso é utilizando os módulos zipfile e xml.etree.ElementTree.

Se temos um arquivo chamado Documento.docx que contém o seguinte conteúdo:

Olá mundo!
Esse é um texto de exemplo.

O código para ler esse conteúdo desse documento pode ser visto a seguir:

import zipfile
import xml.etree.ElementTree as ET

# Abrimos o arquivo .docx e salvamos como um objeto Zipfile
doc_zip = zipfile.ZipFile("Documento.docx")

# Acessamos o conteúdo do documento no formato XML através da função .read()
doc_xml = doc_zip.read("word/document.xml")

# Criamos um parser para converter o XML sem formatação
parser = ET.XMLPullParser(['end'])
parser.feed(doc_xml)

# Percorremos o conteúdo do XML e printamos ele
for _, elem in parser.read_events():
    if elem.text is not None:
        print(elem.text)

Saída do código:

Olá mundo!
Esse é um texto de exemplo.

Caso queira entender melhor como funciona esses módulos, deixo a seguir o link para a documentação de cada um deles:

Apesar da solução acima funcionar, não é recomendado "reinventar a roda". Isso significa que caso já exista um módulo que faz o que desejamos, o ideal é se possível utilizar esse módulo, pois ele já foi testado e leva em consideração diversos cenários e é menos passível a erros.

Assim, para ler documentos .docx em Python, temos por exemplo, o módulopython-docx.

Espero ter ajudado. Qualquer outra dúvida estou a disposição.

Abraços. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!