[Tutor] ascii encoding
Kent Johnson
kent37 at tds.net
Tue Jan 25 00:51:03 CET 2005
Luis N wrote:
> How would I best turn this string:
>
> '2005-01-24 00:00:00.0'
>
> into this string:
>
> '2005%2D01%2D24%2000%3A00%3A00%2E0'
>
> In order to call a URL.
urllib.quote_plus() is intended for this purpose though it doesn't have the result you ask for:
>>> import urllib
>>> s='2005-01-24 00:00:00.0'
>>> urllib.quote_plus(s)
'2005-01-24+00%3A00%3A00.0'
Are you sure you need to escape the - and . ?
You can get exactly what you want with a regular expression and the sub() method. One of the cool
features of re.sub() is that the replace parameter can be a *function*. The function receives the
match object and returns the replacement string. This makes it easy to define replacements that are
programmatically derived from the original string:
>>> import re
>>> def hexify(match):
... return '%%%X' % ord(match.group(0))
...
hexify is the callback function, it will get a single character match and turn it into a hex string
>>> lett_num = re.compile('[^a-zA-Z0-9]')
lett_num is a regular expression that matches everything except letters and digits.
>>> lett_num.sub(hexify, s)
'2005%2D01%2D24%2000%3A00%3A00%2E0'
Kent
>
> I've hunted through the standard library, but nothing seemed to jump out.
>
> Thank You.
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
More information about the Tutor
mailing list