Windows计算机上Python中的文件路径
我一直在Mac和windows机器之间切换,对于python如何喜欢windows上的文件路径感到困惑。如果您有: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
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)自行进行路径处理,可能需要使用反斜杠。