我有一个包含双引号和反斜杠的字符串,我想在Python中设置一个变量。但是,每当我尝试设置它时,引号或斜杠都会被删除或转义。这是一个例子:
>>> foo = 'baz "\"'
>>> foo
'baz ""'
所以我想要baz "\"
取代baz ""
而不是>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
。如果我然后试图逃避反斜杠,它也没有帮助:
{{1}}
现在哪个与我投入的相符但不是我原本想要的。你是如何解决这个问题的?
答案 0 :(得分:67)
你被输出误导了 - 你正在采取的第二种方法实际上做了你想要的,你只是不相信它。 :)
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
>>> print foo
baz "\"
顺便提一下,还有另一种字符串形式可能更清晰一点:
>>> print r'baz "\"'
baz "\"
答案 1 :(得分:25)
使用原始字符串:
>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
请注意,虽然它看起来不对,但它确实是对的。字符串foo
中只有一个反斜杠。
这是因为当您在提示符下键入foo
时,python会在字符串上显示__repr__()
的结果。这导致以下内容(注意print
ed字符串周围只有一个反斜杠和没有引号:
>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
>>> print foo
baz "\"
让我们继续前进,因为有更多的反斜杠技巧。如果你想在字符串的末尾加一个反斜杠并使用上面的方法,你会遇到一个问题:
>>> foo = r'baz \'
File "<stdin>", line 1
foo = r'baz \'
^
SyntaxError: EOL while scanning single-quoted string
执行此操作时,原始字符串无法正常工作。你必须使用常规字符串并转义反斜杠:
>>> foo = 'baz \\'
>>> print foo
baz \
但是,如果你正在使用Windows文件名,那么你会感到很痛苦。你想要做的是使用正斜杠和os.path.normpath()
函数:
myfile = os.path.normpath('c:/folder/subfolder/file.txt')
open(myfile)
这将节省大量的逃避和撕裂。 This page在不久之前经历这个过程非常方便。
答案 2 :(得分:3)
infile = open('c:/folder/subfolder/file.txt')
如果您通过shell(使用os.system
或subprocess
模块)传递给另一个程序,那么您唯一可能需要字符串的情况就是:
答案 3 :(得分:0)
如果您在此处使用文件路径,请使用"\\"
import os
path = r"c:\file"+"\\"+"path"
os.path.normpath(path)
这将输出c:\file\path
答案 4 :(得分:-2)
使用反斜杠结束字符串的另一种方法是使用反斜杠后跟空格结束字符串,然后调用字符串上的.strip()
函数。
我试图连接两个字符串变量并用反斜杠分隔它们,所以我使用了以下内容:
newString = string1 + "\ ".strip() + string2