1
resposta

[Sugestão] Erro de codec ao tentar normalizar os arquivos txt

Estou recebendo este erro ao executar o notebook do curso.

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
c:\Users\Gustavo Fortunato\Desktop\Classificação de Sequências.ipynb Cell 9 line 1
     16 samples_perclass = []
     18 for file_name in arquivos:
---> 19   retorno = readLines(os.path.join(root_path,file_name))
     20   dados.append(retorno[0])
     21   rotulos.append(retorno[1])

c:\Users\Gustavo Fortunato\Desktop\Classificação de Sequências.ipynb Cell 9 line 3
      2 def readLines(filename):
----> 3     lines     = open(filename).read().strip().split('\n')
      4     nomes     = [unicodedata.normalize('NFKD', line).encode('ascii', 'ignore') for line in lines]
      5     categoria = filename.split('/')[-1].split('.')[0]

File c:\Users\Gustavo Fortunato\AppData\Local\Programs\Python\Python310\lib\encodings\cp1252.py:23, in IncrementalDecoder.decode(self, input, final)
     22 def decode(self, input, final=False):
---> 23     return codecs.charmap_decode(input,self.errors,decoding_table)[0]

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 144: character maps to <undefined>

Utilizei o código abaixo para converter os txt em ASCII.


import os
import codecs

def converter_txt_para_ascii(root):
    # Verificação do caminho da pas, para não termos erros de File not found
    if not os.path.exists(root):
        print(f"O caminho '{root}' não existe.")
        return

    arquivos = os.listdir(root)

    # Itere pelos arquivos e processe os arquivos .txt
    for arquivo in arquivos:
        caminho_arquivo = os.path.join(root, arquivo)
        
        if arquivo.lower().endswith(".txt"):
            # Abra o arquivo de texto com codificação utf-8
            with codecs.open(caminho_arquivo, "r", "utf-8") as arquivo_utf8:
                # Leia o conteúdo
                texto = arquivo_utf8.read()

            # Converta o texto para ASCII e salve
            texto_ascii = texto.encode("ascii", "ignore").decode()
            with codecs.open(caminho_arquivo, "w", "utf-8") as arquivo_ascii:
                arquivo_ascii.write(texto_ascii)

            print(f"Convertido '{arquivo}' para formato ASCII.")

if __name__ == "__main__":
    root = "./data/names"  # Substitua pelo caminho para a sua root
    converter_txt_para_ascii(root)

Após a conversão consegui utilizar o código do notebook. Sugiro alteração do notebook da aula atual e também atualização dos outros notebooks.

1 resposta

Olá, Gustavo! Como vai?

Rodamos o notebook e está funcionando conforme esperado. Acredito que as dificuldades que você encontrou possam ser devido a versões de bibliotecas utilizadas no seu ambiente, que tenham comandos diferentes da que foi utilizada no projeto.

Conte conosco quando surgirem dúvidas. Abraços.