Skip to content

Instantly share code, notes, and snippets.

@sma
Created December 20, 2008 14:39
Show Gist options
  • Save sma/38336 to your computer and use it in GitHub Desktop.
Save sma/38336 to your computer and use it in GitHub Desktop.
scan a Python file for Ruby-like string replacements and replace them with Python-like replacements
import re, sys, tokenize
RE = re.compile(r'#\{([^}]+)\}')
def transform(s):
args = []
def sub(m): args.append(m.group(1)); return "%s"
s = RE.sub(sub, s)
return "(%s %% (%s,))" % (s, ", ".join(args)) if args else s
def tokenizer(readline):
for t in tokenize.generate_tokens(readline):
if t[0] == 3:
yield t[0], transform(t[1]), t[2], t[3], ""
else:
yield t
with open(__file__) as f:
print tokenize.untokenize(tokenizer(f.readline))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment