Please help on print string that contains 'tab' and 'newline'
Jason Qian
jqian at tibco.com
Sun Jan 28 20:35:06 EST 2018
Thanks Peter,
replace print with os.write fixed the problem.
On Sun, Jan 28, 2018 at 3:57 AM, Peter Otten <__peter__ at web.de> wrote:
> Jason Qian via Python-list wrote:
>
> > HI
> >
> > I have a string that contains \r\n\t
> >
> > [Ljava.lang.Object; does not exist*\r\n\t*at
> > [com.livecluster.core.tasklet
> >
> >
> > I would like to print it as :
> >
> > [Ljava.lang.Object; does not exist
> > tat com.livecluster.core.tasklet
> >
> > How can I do this in python print ?
>
> Assuming the string contains the escape sequences rather than an actual
> TAB, CR or NL you can apply codecs.decode():
>
> >>> s = r"[Ljava.lang.Object; does not exist\r\n\tat
> com.livecluster.core.tasklet"
> >>> print(s)
> [Ljava.lang.Object; does not exist\r\n\tat com.livecluster.core.tasklet
> >>> import codecs
> >>> print(codecs.decode(s, "unicode-escape"))
> [Ljava.lang.Object; does not exist
> at com.livecluster.core.tasklet
>
> Note that this will decode all escape sequences that may occur in a string
> literal
> in Python, e. g.
>
> >>> codecs.decode(r"\x09 \u03c0 \N{soft ice cream}", "unicode-escape")
> '\t π 🍦'
>
> and will complain when the string is not a valid Python string literal:
>
> >>> codecs.decode(r"\x", "unicode-escape")
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position
> 0-1: truncated \xXX escape
>
> If you need more control you can build your own conversion routine:
>
> import re
>
> lookup = {
> "r": "\r",
> "n": "\n",
> "t": "\t",
> }
>
> def substitute(match):
> group = match.group(1)
> return lookup.get(group, group)
>
> def decode(s):
> return re.sub(r"\\(.)", substitute, s)
>
> s = decode("alpha\\n \\xomega\\\\")
> print(s)
> print(repr(s))
>
>
> --
> https://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list