Python - mecanismo para identificar o tipo de arquivo compactado e descompactar

Um arquivo compactado pode ser classificado em grupos lógicos abaixo
uma. O sistema operacional no qual você está trabalhando (* ix, Win) etc.
b. Diferentes tipos de algoritmo de compressão (ou seja, .zip, .Z, .bz2, .rar, .gzip). Pelo menos a partir de uma lista padrão de arquivos compactados usados ​​principalmente.
c. Então nós temos o mecanismo de tarball - onde eu suponho que não haja compressão. Mas age mais como uma concatenação.

Agora, se começarmos a endereçar o conjunto de arquivos compactados acima,
uma. Opção (a) seria cuidada por python, uma vez que é linguagem independente de plataforma.
b. Opção (b) e (c) parece ter um problema.

O que eu preciso
Como faço para identificar o tipo de arquivo (tipo de compactação) e, em seguida, UN-compactá-los?

Gostar:

fileType = getFileType(fileName)  
switch(fileType):  
case .rar:  unrar....
case .zip:  unzip....

etc  

Portanto, a questão fundamental é como identificar o algoritmo de compactação com base no arquivo (supondo que a extensão não seja fornecida ou esteja incorreta)? Existe alguma maneira específica de fazê-lo em python?

questionAnswers(5)

yourAnswerToTheQuestion