import re _mixed_re = re.compile(r'([a-z])([A-Z]+)') def mixed_to_underscore(name): return _mixed_re.sub( lambda m: m.group(1)+'_'+m.group(2), name).lower()