Python中的Windows路径

表示Windows目录(例如"C:\meshes\as")的最佳方法是什么?我一直试图修改一个脚本,但它从来没有工作,因为我似乎不能得到正确的目录,我认为因为'\'作为转义字符?

544948 次浏览

使用os.path模块。

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

或者使用原始字符串

r"C:\meshes\as"

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

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

你可以用always:

'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

是的,\在Python字符串字面量中表示转义序列的开始。在你的路径中,你有一个有效的双字符转义序列\a,它被分解为一个字符,即ASCII贝尔:

>>> '\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. < p > Python不会处理前缀为__ABC0或R的字符串字面量中的转义序列:

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python on Windows should handle forward slashes, too.

  3. You could use os.path.join ...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ... or the newer pathlib module

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

使用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相对于os.path.join(...)的优点:

  • 清洁剂。
  • 少打字。
  • 更容易读取路径(即更可读)。
  • 可以使用/连接两条不同的路径(见上文)。
  • 更现代。

path相对于normpath(...)的优点:

  • 可以使用/连接路径,而不必回到os.path.join(...),使用嵌套的normpath调用来修复问题。
  • 清洁剂。
  • 少打字。
  • 更容易读取路径(即更可读)。
  • 在Linux和Windows之间移植时,出现错误的可能性更小。
  • 更现代。

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

手动操作例如:

WindowsPath("C:\meshes\as")

或用r或r:

WindowsPath(r'C:/meshes/as')