在python中使用/和\\指定文件夹位置有什么区别?

在python中使用/和\\指定文件夹位置有什么区别?,python,python-3.x,directory,Python,Python 3.x,Directory,我正在Windows10上使用PythonV3.6。当指定一个字符串来表示目录位置时,下面两种方法的区别是什么 folder_location = 'C:\\Users\\username\\Dropbox\\Inv' folder_location = 'C:/Users/username/Dropbox/Inv' 这是我刚刚发布的另一个问题的后续问题。当我使用\\而不是/时,我的问题就解决了 在Unix系统上,文件夹分隔符是/,而在Windows系统上,分隔符是\。不幸的是,在大多数编程语

我正在Windows10上使用PythonV3.6。当指定一个字符串来表示目录位置时,下面两种方法的区别是什么

folder_location = 'C:\\Users\\username\\Dropbox\\Inv'
folder_location = 'C:/Users/username/Dropbox/Inv'
这是我刚刚发布的另一个问题的后续问题。当我使用
\\
而不是
/
时,我的问题就解决了


在Unix系统上,文件夹分隔符是
/
,而在Windows系统上,分隔符是
\
。不幸的是,在大多数编程语言和基于文本的格式(包括C、Python和许多其他格式)中,这个
\
也是一个转义字符。奇怪的是,windows路径中不允许使用
/
字符

因此,为了方便起见,windows上的Python设计为在处理文件系统时同时接受
/
\
作为文件夹分隔符。但是
\
必须由另一个
\
转义(当然,除非您使用原始字符串,例如
r'反斜杠现在是普通字符\\\\!'


另一方面,Selenium将把值写入Firefox首选项,与Python不同,Firefox首选项需要合适的分隔符。这就是为什么在您的示例中使用正向斜杠不起作用。

Windows和Linux/macOS使用不同的路径分隔符-UNIX使用正向斜杠(
/
),而Windows使用反向斜杠(
\

您不应该键入自己的分隔符,始终使用
os.path.join
os.sep
,它们根据您运行的平台为您处理此问题。例如:

import os

folder_location = os.path.join('C:\\', 'Users', 'username', 'Dropbox', 'Inv')
# or
folder_location = os.sep.join(['C:\\', 'Users', 'username', 'Dropbox', 'Inv']);
此外,还需要手动转义驱动器号的尾部斜杠,如Python文档中所指定:

请注意,在Windows上,由于每个驱动器都有一个当前目录,因此os.path.join(“c:,“foo”)表示相对于驱动器c:(c:foo)上当前目录的路径,而不是c:\foo


像这样硬编码完整路径通常是无用的,因为
C:
无论如何只能在Windows上工作。您很可能希望在以后使用相对路径或从其他地方获取的路径,并且需要将段添加到这些路径中。

Windows继承了反斜杠作为Microsoft DOS的路径分隔符。DOS最初不支持子目录,并选择使用(在美国键盘上)容易键入的斜杠
/
字符作为命令行开关

当他们在DOS2中引入子目录时,斜杠
/
或反斜杠
\
用作路径分隔符,但要在命令行上使用斜杠,您必须重新配置开关字符,这一功能后来被完全删除

因此,某些用于查找前面没有空格的开关(如
dir/w
)的命令行是不能使用前斜杠的地方(这与命令行作为单个字符串传递有关,不像POSIX在列表中传递不同的参数)。另外,代码编写得很糟糕,尝试使用反斜杠进行拆分,却不知道斜杠也是一个路径分隔符

有时,由于任一字符具有其他含义,例如
\
是字符串文本中的转义字符,所以它也会变得复杂;这就是为什么要使用
\\
,除非使用原始字符串
r'foo\bar'


我知道的另一个路径分隔符是经典的Mac OS,它使用冒号
。Python通过在或中包含合理的例程来处理这些差异

默认情况下,Windows使用反斜杠作为文件/文件夹分隔符,
\
是一个转义的
\
。windows api还支持与POSIX兼容的文件/文件夹分隔符
/
。但是您使用的库(在您的示例中无法识别)也需要支持它。

标准的Windows路径分隔符是反斜杠
\
。但它用于字符串格式,例如
\n
是行的结尾

出于上述原因,您不希望在路径中使用反斜杠,好像文件夹的名称将以一个字母开头,对应于您将遇到麻烦的特殊字符

要在windows中使用本机反斜杠分隔符,有两种方法。你可以使用原始字符串,然后所有特殊的字符都读文学
path=r“C:\user\myFolder”
或带有转义字符的转义反斜杠也被证明是反斜杠
path=“C:\\user\\myFolder”

但回到DOS,它接受路径字符串中的正斜杠 Python能够接受这两个分隔符。建议在系统上使用本机格式

如果要在两个系统上都使用脚本,请尝试:

import os
if os.name == 'posix':
    path = '/net/myFolder/' 
else:
    path = r'C:\Users\myFolder'

大多数Windows API接受以正斜杠或反斜杠作为分隔符的路径。这不是特定于Python的,但是在Python文本中指定正向斜杠更容易,因为需要转义反向斜杠。因此使用双反斜杠。始终使用本机路径分隔符,某些程序可能不喜欢windows中的“/”,即使文件系统知道如何处理这些程序。请注意,您可以使用原始前缀,而不是将@Jean Françoisfare的反斜杠加倍。可能重复的@Jean Françoisfare:我不知道Windows中哪些API不接受正斜杠,但我相信它们在Python 3中不再那么相关。为什么3票反对?这个问题怎么了?我想知道如何改进我未来关于堆栈溢出的问题。谢谢,非常感谢。这解答了我的疑问,为什么它对Selenium不起作用,而对我过去的python脚本起作用。我会把你的答案标为正确答案。很抱歉,我没有足够的票数来支持它。不是Python这样设计的。Windows API本身接受带有正斜杠的路径。Python正好适应了这个现实。谢谢你的回答。最佳实践是使用os.path和join以实现平台兼容性。很高兴知道这一点。我很高兴