Probablemente desee detectar el tipo MIME de la carga, independientemente de la extensión del archivo, y eso suele hacerse leyendo el encabezado del archivo para detectar "números mágicos" u otros patrones de bits que indiquen la verdadera naturaleza de un archivo. A menudo, los archivos de texto son un caso límite, donde no se detecta ningún encabezado y los primeros x bytes son ASCII o Unicode imprimibles.
Si bien es un poco difícil sumergirse, hay algunas bibliotecas de Python que lo harán por usted. Por ejemplo:https://github.com/ahupp/python-magic funcionará para sus necesidades simplemente infiriendo el tipo MIME según el contenido del archivo, que luego comparará con los tipos que desea aceptar.
Puede encontrar un conjunto de código de ejemplo algo relacionado específico para sus necesidades aquí:https://stackoverflow.com /a/28306825/7341881
Editar:la solución de Eddie es equivalente a la funcionalidad; python-magic envuelve libmagic, que es a lo que accede el comando "archivo" nativo de Linux. Si decide seguir la ruta del subproceso, tenga mucho cuidado de no crear una vulnerabilidad de seguridad al desinfectar incorrectamente la entrada del usuario (por ejemplo, el nombre de archivo proporcionado por el usuario). Esto podría dar lugar a un ataque que otorgue acceso arbitrario al entorno de tiempo de ejecución de su servidor.