> Only you know what anomalies will be found in your data-sets. If > you know/assert that > > -the only stuff in the formatting string is one set of characters > > -that stuff in the replacement-values can never include any of > your format-string characters > > -that you're not using funky characters/formatting in your format > string (such as "%%" possibly followed by an "s" to get the > resulting text of "%s" after formatting, or trying to use other > formatters such as the aforementioned "%f" or possibly "%i") > > then you should be safe. It could also be possible (with my > original replacement of "(.*)") if your values will never include > any substring of your format string. If you can't guarantee > these conditions, you're trying to make a cow out of hamburger. > Or a pig out of sausage. Or a whatever out of a hotdog. :) > > Conventional wisdom would tell you to create a test-suite of > format-strings and sample values (preferably worst-case funkiness > in your expected format-strings/values), and then have a test > function that will assert that the unformatting of every > formatted string in the set returns the same set of values that > went in. Something like > > tests = { > 'I was %s but now I am %s' : [ > ('hot', 'cold'), > ('young', 'old'), > ], > 'He has 3 %s and 2 %s' : [ > ('brothers', 'sisters'), > ('cats', 'dogs') > ] > } > > for format_string, values in tests: > unformatter = format.replace('%s', '(.*)') > for value_tuple in values: > formatted = format_string % value_tuple > unformatted = unformatter.search(formatted).groups() > if unformatted <> value_tuple: > print "%s doesn't match %s when unformatting %s" % ( > unformatted, > value_tuple > format_string) > > -tkc
Thanks for all your help. I've gotten the idea. -- http://mail.python.org/mailman/listinfo/python-list