43

Given a variable which holds a string is there a quick way to cast that into another raw string variable?

The following code should illustrate what I'm after:

line1 = "hurr..\n..durr" line2 = r"hurr..\n..durr" print(line1 == line2) # outputs False print(("%r"%line1)[1:-1] == line2) # outputs True 

The closest I have found so far is the %r formatting flag which seems to return a raw string albeit within single quote marks. Is there any easier way to do this kind of thing?

1
  • The reason you can't "cast" into a raw string is that there aren't "raw strings"; there are raw string literals, which are only a different syntax for creating strings. The data is the same type: str. The question is really about how to convert sequences of text in the original string, into other sequences of text. Commented Aug 8, 2022 at 1:59

3 Answers 3

86

Python 3:

"hurr..\n..durr".encode('unicode-escape').decode() 

Python 2:

"hurr..\n..durr".encode('string-escape') 
Sign up to request clarification or add additional context in comments.

7 Comments

nice one. str.encode() with the various codecs is exactly what i was after. 'unicode-escape' actually solves another problem i was having too. cheers
This doesn't work for \w etc.
I'm getting an error in Python3.3 LookupError: unknown encoding: string-escape
@Erik, strings in Python 3 are Unicode, use unicode-escape.
Don't forget that you can decode the resultant bytes into a regular Unicode string (still escaped, if you don't supply any parameters in Python 3.x), instead of still using a byte string.
|
3

Yet another way:

>>> s = "hurr..\n..durr" >>> print repr(s).strip("'") hurr..\n..durr 

3 Comments

That won't work if s has a ' in it
It should be ok if the ' is in the middle of the string, but it's definitely not robust (it's screwy with Unicode strings, for example).
@Seth No, it will not, because if you have ' contained in the data then the repr will have used double quotes instead of single quotes at the edges of the string.
1

Above it was shown how to encode.

'hurr..\n..durr'.encode('string-escape') 

This way will decode.

r'hurr..\n..durr'.decode('string-escape') 

Ex.

In [12]: print 'hurr..\n..durr'.encode('string-escape') hurr..\n..durr In [13]: print r'hurr..\n..durr'.decode('string-escape') hurr.. ..durr 

This allows one to "cast/trasform raw strings" in both directions. A practical case is when the json contains a raw string and I want to print it nicely.

{ "Description": "Some lengthy description.\nParagraph 2.\nParagraph 3.", ... } 

I would do something like this.

print json.dumps(json_dict, indent=4).decode('string-escape') 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.