Você provavelmente deseja detectar o tipo MIME do upload, independentemente da extensão do arquivo, e isso geralmente é feito lendo o cabeçalho do arquivo para detectar "números mágicos" ou outros padrões de bits que indicam a verdadeira natureza de um arquivo. Muitas vezes, os arquivos de texto são um caso extremo, onde nenhum cabeçalho é detectado e os primeiros x bytes são ASCII ou Unicode imprimíveis.
Embora isso seja um pouco complicado para mergulhar, existem algumas bibliotecas Python que farão isso por você. Por exemplo:https://github.com/ahupp/python-magic funcionará para suas necessidades simplesmente inferindo o tipo mime pelo conteúdo do arquivo, que você irá comparar com os tipos que deseja aceitar.
Um conjunto um pouco relacionado de código de exemplo específico para suas necessidades pode ser encontrado aqui:https://stackoverflow.com /a/28306825/7341881
Edit:A solução de Eddie é equivalente em termos de funcionalidade; python-magic envolve libmagic, que é o que o comando "file" nativo do Linux usa. Se você decidir seguir a rota do subprocesso, tenha muito cuidado para não criar uma vulnerabilidade de segurança ao limpar inadequadamente a entrada do usuário (por exemplo, o nome de arquivo fornecido pelo usuário). Isso pode levar a um ataque que conceda acesso arbitrário ao ambiente de tempo de execução do servidor.