Ler e salvar arquivos UTF-8 em Python

Ler e escrever arquivos em Python é simples, mesmo para arquivos na rede. Passamos o caminho correto e o Python faz todo o trabalho duro. Há só um pequeno detalhe quando temos que lidar com outras codificações.

Ler arquivo

def read(filename, encoding='utf-8', errors='strict'):
    with open(filename, 'rb') as f:
        return f.read().decode(encoding, errors=errors)

Salvar arquivo

def write(content, filename, encoding='utf-8', errors='strict'):
    with open(filename, 'wb') as f:
        f.write(str(content).encode(encoding, errors=errors))
    return True

As duas funções estão sem tratamento de erro. Pode acontecer da estrutura de pastas não existir ou o usuário não ter permissão de escrita ou vários outros erros. Write abaixo faz o tratamento para estrutura de pastas e repassa outros erros.

import os

def write(text, filename, encoding='utf-8', errors='strict'):
    data = str(text).encode(encoding, errors=errors)
    try:
        with open(filename, 'wb') as f:
            f.write(data)
    except IOError as e:
        if e.errno == 2:
            os.makedirs(os.path.dirname(filename), exist_ok=True)
            return write(text, filename, encoding, errors)
        else:
            raise e

You may also like...