Python中的Windows路径


152

例如,代表Windows目录的最佳方法是什么"C:\meshes\as"?我一直在尝试修改脚本,但是它永远无法正常工作,因为我似乎无法正确获得目录,我想是因为它'\'充当转义符?

Answers:


220

您可以始终使用:

'C:/mydir'

这适用于linux和Windows。其他可能性是

'C:\\mydir'

如果您对某些名称有疑问,也可以尝试使用原始字符串文字:

r'C:\mydir'

但是,最佳实践是使用os.path始终为您的操作系统选择正确配置的模块功能:

os.path.join(mydir, myfile)

从python 3.4开始,您还可以使用pathlib模块。这等同于以上内容:

pathlib.Path(mydir, myfile)

要么

pathlib.Path(mydir) / myfile

2
@Gareth,我很懒,经常发现自己使用“ /”。但是从长远来看,使用os.path更方便。它还允许您将mydir和myfile用作可以轻松修改的变量。
joaquin 2010年

13
唯一要小心的原始字符串的是,他们不能以\结尾
道格拉斯Leeder先生

您可以使用os.path.join()消除使用\结束路径的需要。
Will Ediger 2014年

1
我喜欢r(原始字符串)语法。如果您要复制一条长路径,该路径通常需要用正斜杠替换所有反斜杠,则
很有

原始字符串可以以\\结尾,因此我们可以将文件连接到以下路径:codecs.open(r“ C:\ maXbox \ EKON24 \ tweet_data \\” + file,'r',encoding ='utf-8')为传真:
马克斯·克莱纳

20

使用os.path模块。

os.path.join( "C:", "meshes", "as" )

或使用原始字符串

r"C:\meshes\as"

我也建议不要在路径或文件名中使用空格。您可以在字符串中使用双反斜杠。

"C:\\meshes\\as.jpg"

11
当组件是驱动器盘符时,os.path.join可能无法按预期方式运行,因为即使这样,也允许相对路径。(第一行的结果是Windows上的'C:meshes \\ as'。)
dash-tom-bang 2010年

@ dash-tom-bang的评论非常重要。做"C:\"第一件事情是对的吗?这会破坏使用的某些清洁度join吗?
杰克·奥康纳2014年

1
@ JackO'Connor我就是这样做的。您当然不希望将"C:\"文件名放在中间。此外,您可以os.path.normpath在连接之前或之后使用,以确保路径打印良好。
2015年

但它也不起作用。什么工作是os.path.join( "C:\\", "meshes", "as" )
让·弗朗索瓦·法布尔

17

是的,\在Python中,字符串文字表示转义序列的开始。在您的路径中,您有一个有效的两个字符的转义序列\a,该序列被折叠成一个字符,即ASCII Bell

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

其他常见的转义序列包括\t(制表符),\n(换行),\r(回车):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

如您所见,在所有这些示例中,反斜杠和文字中的下一个字符被组合在一起以在最终字符串中形成单个字符。Python的转义序列的完整列表在这里

有多种解决方法:

  1. Python将不会处理与前缀字符串文字的转义序列rR

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Windows上的Python也应处理正斜杠。

  3. 您可以使用os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ...或较新的pathlib模块

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    

-1

使用PowerShell

在Windows中,只要将PowerShell用作命令行界面,就可以/在所有地方像Linux或macOS一样在路径中使用。它预装在Windows上,并且支持许多Linux命令,例如lscommand。

如果使用Windows命令提示符(cmd在Windows“开始”菜单中键入时显示的命令提示符),则需要在其中指定路径\。您可以/在所有其他地方使用路径(代码编辑器,Python交互模式等)。


-1

如果您想粘贴其他来源的Windows路径(例如,文件资源管理器),则可以通过input()python控制台中的调用来粘贴:

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

然后复制结果

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.