On Thu, 13 Jan 2005 12:19:06 +1000, Stephen Thorne <[EMAIL PROTECTED]> wrote:
>On Thu, 13 Jan 2005 01:24:29 GMT, Bengt Richter <[EMAIL PROTECTED]> wrote: >> extensiondict = dict( >> php = 'application/x-php', >> cpp = 'text/x-c-src', >> # etcetera >> xsl = 'test/xsl' >> ) >> >> def detectMimeType(filename): >> extension = os.path.splitext(filename)[1].replace('.', '') extension = os.path.splitext(filename)[1].replace('.', '').lower() # better >> try: return extensiondict[extension] >> except KeyError: >> basename = os.path.basename(filename) >> if "Makefile" in basename: return 'text/x-makefile' # XXX case >> sensitivity? >> raise NoMimeError > >Why not use a regexp based approach. ISTM the dict setup closely reflects the OP's if/elif tests and makes for an efficient substitute for the functionality when later used for lookup. The regex list is O(n) and the regexes themselves are at least that, so I don't see a benefit. If you are going to loop through extensionlist, you might as well write (untested) flowerew = filename.lower().endswith for ext, mimetype: if flowerew(ext): return mimetype else: if 'makefile' in filename.lower(): return 'text/x-makefile' raise NoMimeError using a lower case extension list including the dot. I think it would run faster than a regex, and not scare anyone unnecessarily ;-) The dict eliminates the loop, and is easy to understand, so IMO it's a better choice. >extensionlist = [ >(re.compile(r'.*\.php') , "application/x-crap-language"), >(re.compile(r'.*\.(cpp|c)') , 'text/x-c-src'), >(re.compile(r'[Mm]akefile') , 'text/x-makefile'), >] >for regexp, mimetype in extensionlist: > if regexp.match(filename): > return mimetype > >if you were really concerned about efficiency, you could use something like: >class SimpleMatch: > def __init__(self, pattern): self.pattern = pattern > def match(self, subject): return subject[-len(self.pattern):] == self.pattern I'm not clear on what you are doing here, but if you think you are going to compete with the timbot's dict efficiency with a casual few lines, I suspect you are PUI ;-) (Posting Under the Influence ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list