[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