Refactoring; arbitrary expression in lists

Nick Craig-Wood nick at
Thu Jan 13 03:31:44 EST 2005

Stephen Thorne <stephen.thorne at> wrote:
>  Why not use a regexp based approach.

Good idea...  You could also use sre.Scanner which is supposed to be
fast like this...

import re, sre

scanner = sre.Scanner([
    (r"\.php$", "application/x-php"),
    (r"\.(cc|cpp)$", "text/x-c++-src"),
    (r"\.xsl$", "xsl"),
    (r"Makefile", "text/x-makefile"),
    (r".", None),

def detectMimeType( filename ):
    t = scanner.scan(filename)[0]
    if len(t) < 1:
        return None
        # raise NoMimeError
    return t[0]

for f in ("index.php", "index.php3", "", "prog.cpp", "flodge.xsl", "Makefile", "myMakefile", "potato.123"):
    print f, detectMimeType(f)



index.php application/x-php
index.php3 None text/x-c++-src
prog.cpp text/x-c++-src
flodge.xsl xsl
Makefile text/x-makefile
myMakefile text/x-makefile
potato.123 None

Nick Craig-Wood <nick at> --

More information about the Python-list mailing list