在windows上,os.path.join()和os.path.normpath()都添加了双反斜杠

2024-09-30 15:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我要将正斜杠格式的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位Windows7上使用Python2.7。


Tags: 文件path方法路径oswindows格式unix
4条回答

显示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']

“\\”将显示为单个字符。

'static\\css\\reset.css'是字符串r'static\css\reset.css'的表示。

双反斜杠表示字符串中反斜杠的转义,它的意思是“对下一个字符做一些特殊的事情”,这里不需要这样做。

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

我将进一步阐述埃尔扎的正确回答和你的评论。在前面的回答中,可能会让您感到困惑和不安的是,在源代码中提供的Python字符串,以及Python控制台和ide向您显示的Python字符串,开发人员和字符串的打印方式(即显示给用户)之间存在差异:

>>> 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 documentation),例如'\n'表示新行,而其他的则没有,例如'\s',它只打印为\s

另外,转义字符的原因是,对于Python/计算机来说,它们是向程序员传达文本中有哪些特殊字符的方便方式。例如,这样,在'\t'(制表符)和' '(一些空格)之间就没有歧义,实际上可以看到不可打印的/一些控制字符,等等

我将进一步阐述埃尔扎的正确回答和你的评论。在前面的回答中,可能会让您感到困惑和不安的是,在源代码中提供的Python字符串,以及Python控制台和ide向您显示的Python字符串,开发人员和字符串的打印方式(即向用户显示)之间存在差异:

>>> 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 documentation),例如'\n'表示新行,而其他的则没有,例如'\s',它只打印为\s

另外,转义字符的原因是,对于Python/计算机来说,它们是向程序员传达文本中有哪些特殊字符的方便方式。例如,这样,在'\t'(制表符)和' '(一些空格)之间就没有歧义,实际上可以看到不可打印的/一些控制字符,等等

相关问题 更多 >