Escapeism

Kay Schluehr kay.schluehr at gmx.net
Sun Oct 1 05:20:15 EDT 2006


Frederic Rentsch wrote:
> Kay Schluehr wrote:
> > Sybren Stuvel wrote:
> >
> >> Kay Schluehr enlightened us with:
> >>
> >>> Usually I struggle a short while with \ and either succeed or give up.
> >>> Today I'm in a different mood and don't give up. So here is my
> >>> question:
> >>>
> >>> You have an unknown character string c such as '\n' , '\a' , '\7' etc.
> >>>
> >>> How do you echo them using print?
> >>>
> >>> print_str( c ) prints representation '\a' to stdout for c = '\a'
> >>> print_str( c ) prints representation '\n' for c = '\n'
> >>> ...
> >>>
> >>> It is required that not a beep or a linebreak shall be printed.
> >>>
> >> try "print repr(c)".
> >>
> >
> > This yields the hexadecimal representation of the ASCII character and
> > does not simply echo the keystrokes '\' and 'a' for '\a' ignoring the
> > escape semantics. One way to achieve this naturally is by prefixing
> > '\a' with r where r'\a' indicates a "raw" string. But unfortunately
> > "rawrification" applies only to string literals and not to string
> > objects ( such as c ). I consider creating a table consisting of pairs
> > {'\0': r'\0','\1': r'\1',...}  i.e. a handcrafted mapping but maybe
> > I've overlooked some simple function or trick that does the same for
> > me.
> >
> > Kay
> >
> >
> Kay,
>
> This is perhaps yet another case for SE? I don't really know, because I
> don't quite get what you're after. See for yourself:
>
>  >>> import SE
>  >>> Printabilizer = SE.SE ( '''
>    (1)=\\1   # All 256 octets can be written as parenthesized ascii
>    (2)=\\2
>    "\a=\\a"  # (7)=\\a"
>    "\n=\\n"  # or (10)=\\n  or (10)=LF or whatever
>    "\r=\\r"  # (13)=CR
>    "\f=\\f"
>    "\v=\\v"
>    # Add whatever other ones you like
>    #    and translate them to anything you like.
>  ''')
>
>  >>> print Printabilizer ('abd\aefg\r\nhijk\vlmnop\1\2.')
> abd\aefg\r\nhijk\vlmno\1\2.
>
>
> If you think this may help, you'll find SE here:
> http://cheeseshop.python.org/pypi/SE/2.2%20beta
>
>
> Regards
>
> Frederic

This looks quite good. "rawrification" or "printabalization" that's
exactly what I was looking for and I thought this problem would be so
common that someone has done an implementation already. Thanks,
Frederik!

Kay




More information about the Python-list mailing list