【问题标题】:How to refer to "\" sign in python string如何在python字符串中引用“\”符号
【发布时间】:2010-08-20 13:47:32
【问题描述】:

我在引用字符串中的特殊符号时遇到问题:

我有:path='C:\dir\dir1\dir2\filename.doc'

我想要filename

当我尝试时:filename=path[path.rfind("\"):-4]

然后解释器说它是从“\”开始的错误行,因为它被视为注释。

【问题讨论】:

标签: python string


【解决方案1】:

您可以使用"\\",如果您坚持使用反斜杠,从技术上讲,使用os.path.sep 会更好。但更好的是,在路径中使用 /,它在 Windows 上运行良好

Python 有builtin functions to manipulate paths。请注意,如果您仍然喜欢反斜杠而不是正斜杠,则需要将反斜杠加倍

>>> import os
>>> path='C:\\dir\\dir1\\dir2\\filename.doc'
>>> os.path.splitext(os.path.basename(path))
('filename', '.doc')

并使用正斜杠

>>> path='C:/dir/dir1/dir2/filename.doc'
>>> os.path.splitext(os.path.basename(path))
('filename', '.doc')

【讨论】:

【解决方案2】:

要么将其转义为“\\”,要么使用如下的原始字符串:r“\”。

【讨论】:

  • @Gnibbler:path = r'C:\dir\dir1\dir2\filename.doc' 有效。你想到了什么?
  • @Manoj: @Gnibbler 是对的,r"\" 不起作用(r'C:\dir\dir1\dir2\' 也不起作用),因为即使在原始字符串中,\'/\" 仍然会转义(它必须)
【解决方案3】:

逃脱它:

filename=path[path.rfind("\\"):-4]

或者更好的是,使用basename - Python 的os.path 库的一部分:

from os.path import basename
basename(path)

来自basename的手册:

返回路径名路径的基本名称。这是split(path) 返回的对的后半部分。请注意,此函数的结果与 Unix basename 程序不同;其中'/foo/bar/' 的基本名称返回'bar'basename() 函数返回一个空字符串 ('')。

【讨论】:

    【解决方案4】:

    您可以键入双倍的:“\”。

    但是要将文件名从 Windows 文件名中拆分出来,请使用分区作为 os.path.split 仅适用于 /:

    >>> path=r'C:\dir\dir1\dir2\filename.doc'
    >>> print path.rpartition('\\')[-1]
    filename.doc
    

    【讨论】:

    • 在玩 IDLE 时注意到它,并在您发表评论前 10 分钟进行了编辑。与我输入 rpartition 代码的时间相同。也许 \ 不适用于 os.path.split,因为我现在正在运行 Linux。我认为它和 basename 应该可以工作。
    • 在我的评论 10 分钟后编辑 :)
    • 该死的屏幕分辨率。把它混合起来。但没有目的。我只是在更正我的帖子后才阅读您的评论。我只是通过测试才知道的,所以感谢您分享您的知识(或者是痛苦的回忆;))
    【解决方案5】:

    常见问题解答中对此有所了解:Why can’t raw strings (r-strings) end with a backslash?

    如果您正在尝试构建 Windows 路径名,请注意所有 Windows 系统调用接受正斜杠 太:

    f = open("/mydir/file.txt")  # works fine!
    

    如果您尝试构建路径名 对于 DOS 命令,请尝试例如之一

    dir = r"\this\is\my\dos\dir" "\\"
    dir = r"\this\is\my\dos\dir\ "[:-1] 
    dir = "\\this\\is\\my\\dos\\dir"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多