Can '\' be in a Python string? [duplicate] - python

This question already has answers here:
How can I put an actual backslash in a string literal (not use it for an escape sequence)?
(4 answers)
Closed 8 years ago.
I program in Python in PyCharm and whenever I write '\' as a string it says that the following statements do nothing. For example:
Is there a way to fix this and make it work?
Thanks.

You need to double the backslash:
'/-\\'
as a single backslash has special meaning in a Python string as the start of an escape sequence. A double \\ results in the string containing a single backslash:
>>> print '/-\\'
/-\
If the backslash is not the last character in the string, you could use a r'' raw string as well:
>>> print r'\-/'
\-/

You need to scape them to be in the string, for example:
>>>s='\\'
>>>print s
\
You can also use the r (raw string) modifier in front of the string to include them easily but they can't end with an odd number of backslash. You can read more about string literals on the docs.

Related

How to avoid double backslashes in string literals being replaced with single backslash? [duplicate]

This question already has answers here:
How to write string literals in Python without having to escape them?
(6 answers)
Closed 7 months ago.
Python string replaces double backslash with a single backslash? How avoid replace? I need to keep \\n as it is.
Code:
if __name__ == "__main__":
str1 = '{"en":"M L\\n\\nL\\n\\nS","fr":""}'
print(str1)
print("{}".format(str1))
Output:
{"en":"M L\n\nL\n\nS","fr":""}
{"en":"M L\n\nL\n\nS","fr":""}
Expected output:
{"en":"M L\\n\\nL\\n\\nS","fr":""}
Use raw strings by inputting an r before the string:
r"M L\\n\\nL\\n\\nS"
This will ignore any and all escape characters.
Read more here: Raw Strings in Python
If you want to tell python to not convert \\ to \ you can specify your string as raw string. This will auto escape \ so they will be seen as they are. A raw string is a string that no characters can be escaped in it. You can do this by putting a r char before the string starts:
r"M L\\n\\nL\\n\\nS"
>>> "M L\\\\n\\\\nL\\\\n\\\\nS"
So you can see that python automatically escaped all the \ characters so when you use this string it will interpret as "M L\\n\\nL\\n\\nS".
If you have a multi line string you can do this the same way:
a = r"""abcdefg\n\t\a
dygkcy\d\wscd"""
note: There is no difference for ' and ".

python split a string with special charcter [duplicate]

This question already has answers here:
How can I put an actual backslash in a string literal (not use it for an escape sequence)?
(4 answers)
Closed 1 year ago.
I need to split a string that I receive like that :
my_string = "\data\details\350.23.43.txt"
when I use my_string.replace ("\\", "/")
it returns : /data/detailsè.23.43.txt
It's considering the \350 in my string as a special character 'è'
Edit after your comment:
Try
my_string = r"\data\details\350.23.43.txt"
That happens because \ooo is interpreted as a character with octal value as described in the docs.
I guess the only way is to escape the \ as in:
my_string = "\data\details\\350.23.43.txt"
Then you can do stuff like:
my_string.split("\\")
Where do you get the string from? Is there a way to influence that?
And this looks like a path. It would be better to use
os.path.join("data", "details", "350.23.43.txt")
to create paths independently of the operating system.
\ in string literals are treated as escaping chars. That is why s1 = "line\nsecond line" creates a string with two lines. That is also why you use "\\" in my_string.replace ("\\", "/").
So to fix your problem, if you're using a string literal my string = "\data\details\350.23.43.txt" you should instead use "\\data\\details\\350.23.43.txt" to make sure your \ are properly escaped. Alternatively, you can use a raw string my string = r"\data\details\350.23.43.txt" by prepending r to the quote. That way nothing gets escaped (so r"\n" would be a 2 char string with \ and n instead of just a single new line char)

Python ignore escape backslash in replacement [duplicate]

This question already has answers here:
Why do backslashes appear twice?
(2 answers)
Closed 1 year ago.
When trying to make this replacement:
'C:\\Users\\uXXXXXX\\Downloads\\Folder\\Unprocessed\\FINAL_OUTBOUND.txt'.replace(r'\\', r'\')
Python throws the below error
File "<ipython-input-138-36d102855db9>", line 5
'C:\\Users\\uXXXXXX\\Downloads\\Folder\\Unprocessed\\FINAL_OUTBOUND.txt'.replace(r'\\', r'\')
^
SyntaxError: EOL while scanning string literal
How can I make this replacement successfully?
What are you trying to replace? the double slash is because by default a backslash is an escape character, if you want it as a literal then you do a double backslash to escape it.
you can see when you print it, it doesnt print with double backslashes. if you dont want to put double backslash in the string then you can tell python to read it as a raw string and not consider any special meaning in chars. you do this by prefixing the string with an r
text = 'C:\\Users\\uXXXXXX\\Downloads\\Folder\\Unprocessed\\FINAL_OUTBOUND.txt'
print(text)
text = r'C:\Users\uXXXXXX\Downloads\Folder\Unprocessed\FINAL_OUTBOUND.txt'
print(text)
OUTPUT
C:\Users\uXXXXXX\Downloads\Folder\Unprocessed\FINAL_OUTBOUND.txt
C:\Users\uXXXXXX\Downloads\Folder\Unprocessed\FINAL_OUTBOUND.txt

Python: Trailing backslash in raw strings [duplicate]

This question already has answers here:
Why can't Python's raw string literals end with a single backslash?
(13 answers)
Closed 7 months ago.
The current Python grammar doesn't allow one to output a trailing \ in a raw string:
>>> print(r'a\b\c\')
SyntaxError: EOL while scanning string literal
On the contrary, you can write Bash like this:
echo 'a\b\c\'
I understand what the doc is saying. I wouldn't feel strange if an expression '\' fails because the backslash is escaping the quote. What I'm questioning is r'\': Aren't raw strings meant to be raw (which means backslashes in the string are taken literally)?
Do we have to write r'a\b\c' + '\\' or 'a\\b\\c\\' to make a string literal a\b\c\ in Python? I couldn't see how this is Pythonic.
From the documentation,
Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.
The limitation is due to the fact that you need someway to include a ' inside a raw string. Otherwise there is no way to put bob said "I'm not hungry" in a string.
So you end up in weird situation where you need an escape character for this case. So in raw strings you escape a ' with a \ and yes the \ stays in the string.
So r'bob said "I\'m not hungry"' it is!!
When you write print(r'\'), Python understand \' in that statement as a character. Because of that python raised syntax error because the there is a incomplete string inside print function.
For an example if you need to print i am "free" man , you should write
print("i am \"free\" man")

Including \n in a string in python [duplicate]

This question already has answers here:
How can I put an actual backslash in a string literal (not use it for an escape sequence)?
(4 answers)
Closed 7 years ago.
How do i escape \n in a string in python.
How do i write out to stdin in python this string "abc\ndef" as one single input
Sys.stdout.write("abc\ndef")
current output
import sys
>>> sys.stdout.write("abc\ndef")
abc
def
I would like it to be abc\ndef
You should escape the backslash so that it's not treated as escaping character itself:
Sys.stdout.write("abc\\ndef")
Background
The backslash \ tells the parser that the next character is something special and must be treated differently. That's why \n will not print as \n but as a newline. But how do we write a backslash then? We need to escape it, too, resulting in \\ for a single backslash and \\n for the output \n.
Docs here, also see this SO question
Alternatively you can use "raw" strings, i.e. prefixing your strings with an r, to disable interpreting escape sequences is your strings:
Sys.stdout.write(r"abc\ndef")
As an alternative to escaping the backslash, you can disable backslash-escaping entirely by using a raw string literal:
>>> print(r"abc\ndef")
abc\ndef

Categories

Resources