221

例如,表示 Windows 目录的最佳方式是什么"C:\meshes\as"?我一直在尝试修改脚本,但它从不工作,因为我似乎无法正确获取目录,我假设是因为'\'充当转义字符?

4

6 回答 6

309

您可以始终使用:

'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
于 2010-06-01T22:30:58.460 回答
32

使用os.path模块。

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

或使用原始字符串

r"C:\meshes\as"

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

"C:\\meshes\\as.jpg"
于 2010-06-01T22:30:30.637 回答
28

是的,\在 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 不会处理以rorR为前缀的字符串文字中的转义序列:

    >>> 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')
    
于 2018-03-31T12:31:55.170 回答
3

使用Path

from pathlib import Path
data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "raw_data.txt"
print(file_to_open.read_text())

Path采用类似路径的字符串并为当前操作系统(Windows 或 Linux)调整所有内容。例如,在 Linux 上它将所有反斜杠转换为正斜杠,而在 Windows 上则相反。

全文:Python 3 快速提示:在 Windows、Mac 和 Linux 上处理文件路径的简单方法


我的经验:

  • 我用了 6 个月os.path.join(...),然后切换到normpath(...)最后切换到Path(...). 使用了所有三个之后,Path 是世界上最好的。

Path over 的优点os.path.join(...)

  • 清洁器。
  • 少打字。
  • 更容易阅读路径(即更具可读性)。
  • /可以使用(见上文)加入两条不同的路径。
  • 更现代。

path over 的优点normpath(...)

  • 可以使用嵌套的 normpath 调用来修复问题,/而不必回退到连接路径。os.path.join(...)
  • 清洁器。
  • 少打字。
  • 更容易阅读路径(即更具可读性)。
  • 在 Linux 和 Windows 之间移植时出现错误的可能性较小。
  • 更现代。
于 2021-07-03T08:26:12.800 回答
1

Python 原始字符串是通过在字符串文字前加上 'r' 或 'R' 来创建的。Python 原始字符串将反斜杠 () 视为文字字符。当我们想要一个包含反斜杠的字符串并且不希望它被视为转义字符时,这很有用。

手动执行例如:

WindowsPath("C:\meshes\as")

或使用 r 或 R:

WindowsPath(r'C:/meshes/as')
于 2021-07-28T06:14:55.000 回答
-4

使用 PowerShell

在 Windows 中,只要您使用 PowerShell作为命令行界面,您就可以/在任何地方像 Linux 或 macOS 一样在您的路径中使用。它预装在 Windows 上,并且支持许多Linux 命令,例如command。ls

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

于 2020-03-03T10:45:49.013 回答