Windows计算机上Python中的文件路径

Windows计算机上Python中的文件路径,windows,python-2.7,filepath,Windows,Python 2.7,Filepath,我一直在Mac和windows机器之间切换,对于python如何喜欢windows上的文件路径感到困惑。如果您有: humfile = os.path.expanduser("~")+os.sep+'Reach_4a'+os.sep+'humminbird'+os.sep+'April2014'+os.sep+'R01338'+os.sep+'R01338.DAT' 如果键入humfile,它将返回: c:/Users/dan\\Reach_4a\\huminbird\\Sept2014\\R

我一直在Mac和windows机器之间切换,对于python如何喜欢windows上的文件路径感到困惑。如果您有:

humfile = os.path.expanduser("~")+os.sep+'Reach_4a'+os.sep+'humminbird'+os.sep+'April2014'+os.sep+'R01338'+os.sep+'R01338.DAT'
如果键入
humfile
,它将返回:

c:/Users/dan\\Reach_4a\\huminbird\\Sept2014\\R01762\\R01762.dat
c:/Users/dan\Reach_4a\huminbird\Sept2014\R01762\R01762.dat
如果键入
print-humfile
,它将返回:

c:/Users/dan\\Reach_4a\\huminbird\\Sept2014\\R01762\\R01762.dat
c:/Users/dan\Reach_4a\huminbird\Sept2014\R01762\R01762.dat
为什么它会从
\
切换到
\


另外,为什么
os.path.expanduser
返回
/
os.sep
返回
\

在Windows上(通常,不是特别是Python),在文件路径中使用反斜杠总是最安全的。正斜杠通常会自动转换为反斜杠,但并不全面。至于Python为什么不一致,可能只是因为不同的部分是由不同的人编写的。有些Linux程序员就是不喜欢使用反斜杠。:-)
\\
是单个反斜杠字符的表示形式。这将转义反斜杠以防止创建诸如
\n
\t
之类的控制字符。或者使用前缀为
r
的原始字符串,例如
r'C:\Users\ted'
,但原始字符串不能以反斜杠结尾。至于
expanduser
,这取决于
os.environ['HOME']
os.environ['USERPROFILE']
os.environ['HOMEPATH']
的值。可能您有Cygwin的
HOME
或类似的使用正斜杠的东西。使用
os.path.join
而不是反复添加
os.sep
,然后规范化路径:
humfile=os.path.normpath(os.path.join(os.path.expanduser('~')、'Reach_4a'、'humbird'、'April2014'、'R01338'、'R01338.DAT'))
关于使用反斜杠@HarryJohnston的建议是正确的。Windows executive(即对象管理器和i/O管理器)专门使用反斜杠,但系统DLL中的运行时库ntdll.DLL在进行系统调用之前处理将路径中的正斜杠转换为反斜杠的过程。因此,您通常可以在大多数Windows API调用中使用正斜杠。然而,使用
\\?\
前缀绕过正常路径处理显然需要使用反斜杠。此外,某些程序(如cmd.exe)自行进行路径处理,可能需要使用反斜杠。