6

我想将正斜杠格式的 unix 文件路径转换为反斜杠格式的 Windows 文件路径。我尝试了 os.path.join() 和 os.path.normpath() 但它们似乎都在结果中添加了双反斜杠。例如,如果我使用os.path.normpath('static/css/reset.css'),结果是'static\\css\\reset.css'而不是static\css\reset.css。并'static/css/reset.css'.replace('/','\\')给我相同的结果os.path.normpath。有没有办法获得单反斜杠分隔的字符串格式?

顺便说一句,我在 64 位 Windows 7 上使用 Python2.7。

4

3 回答 3

8

'static\\css\\reset.css' is the representation of the string r'static\css\reset.css'.

The double backsalsh indicates escaping of the backslash - in string literals it has a meaning of "do something special with the next character", which you don't want here.

>>> print('static\\css\\reset.css')
static\css\reset.css
于 2013-07-03T00:48:46.963 回答
4

我将扩展 Elzar 的正确答案和您的评论。可能让您感到困惑并且在之前的答案中没有说明的是 Python 字符串之间存在差异,因为您在源代码中提供它,而 Python 控制台和 IDE 向您、开发人员和字符串的打印方式,即显示给用户的方式:

>>> s = 'c:\\directory\\file.txt'
>>> s
'c:\\directory\\file.txt'  <-- if you ask for the value, you will see double slashes
>>> print s
c:\directory\file.txt      <-- if you print the string, the user will see single slashes

我认为你得到“系统找不到指定的路径”的原因。是因为您从 Python 控制台/IDE 手动复制到剪贴板并粘贴某些内容(也支持您的路径在问题中的引号中显示的事实)。

更令人困惑的是,您有时会使用单引号。只有一些斜杠字符组合具有特殊含义(请参阅Python 文档),例如'\n'用于换行而其他不具有特殊含义,例如'\s'仅打印为\s.

作为旁注,转义字符的原因是它们是 Python/计算机通常与程序员交流文本中有哪些特殊字符的便捷方式。这样,例如,'\t'(制表符)和' '(多个空格)之间没有歧义,无法打印/实际上可以看到一些控制字符等。

于 2014-11-25T16:25:58.883 回答
1

static\\css\\reset.css正在显示,因为“\\”代表“\”。如果您使用此文件路径,它将被解释为“static\css\reset.css”。

作为交互式 shell 中的检查

>>> list('static\\css\\reset.css')

给出:

['s', 't', 'a', 't', 'i', 'c', '\\', 'c', 's', 's', '\\', 'r', 'e', 's', 'e', 't', '.', 'c', 's', 's']

"\\" 将显示为单个字符。

于 2013-07-03T00:56:17.923 回答