代码之家  ›  专栏  ›  技术社区  ›  Chris Bunch

引用Python字符串文字中的反斜杠[重复]

  •  79
  • Chris Bunch  · 技术社区  · 17 年前

    我有一个包含双引号和反斜杠的字符串,我想在Python中将其设置为变量。然而,每当我尝试设置它时,引号或斜线要么被删除,要么被转义。这里有一个例子:

    >>> foo = 'baz "\"'
    >>> foo
    'baz ""'
    

    所以,而不是 baz "\" 就像我想要的那样 baz "" 。如果我试图转义反斜杠,也无济于事:

    >>> foo = 'baz "\\"'
    >>> foo
    'baz "\\"'
    

    这现在与我投入的相匹配,但不是我最初想要的。你如何解决这个问题?

    5 回复  |  直到 17 年前
        1
  •  99
  •   Andrey Semakin    5 年前

    你被输出误导了——你采取的第二种方法实际上做了你想做的事,你只是不相信它。:)

    >>> foo = 'baz "\\"'
    >>> foo
    'baz "\\"'
    >>> print(foo)
    baz "\"
    

    顺便说一句,还有另一种字符串形式可能更清晰一些:

    >>> print(r'baz "\"')
    baz "\"
    
        2
  •  42
  •   Andrey Semakin    5 年前

    使用原始字符串:

    >>> foo = r'baz "\"'
    >>> foo
    'baz "\\"'
    

    请注意,虽然看起来不对,但实际上是对的。字符串中只有一个反斜杠 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 不久前经历这件事时很方便。

        3
  •  5
  •   babbageclunk    17 年前

    Harley说了什么,除了最后一点——在调用open之前,实际上没有必要将“/”改为“\”。Windows非常乐意接受带有正斜杠的路径。

    infile = open('c:/folder/subfolder/file.txt')
    

    您可能需要字符串normpathed的唯一一次是通过shell传递给另一个程序(使用 os.system 或 subprocess 模块)。

        4
  •  0
  •   Stephan Yazvinski    5 年前

    如果你来这里是为了文件路径,只需使用 "\\"

    import os
    path = r"c:\file"+"\\"+"path"
    os.path.normpath(path)
    

    将输出 c:\file\path

        5
  •  -2
  •   Kevin Panko Matthew Woodard    13 年前

    用反斜杠结束字符串的另一种方法是用反斜杠后跟空格结束字符串,然后调用 .strip() 字符串上的函数。

    我试图将两个字符串变量连接起来,并用反斜杠分隔,所以我使用了以下方法:

    newString = string1 + "\ ".strip() + string2