我应该如何在Python字符串文字中编写Windows路径?

uqjltbpv  于 2023-04-10  发布在  Python
关注(0)|答案(5)|浏览(87)

假设我需要引用路径C:\meshes\as。如果我尝试直接写它,比如"C:\meshes\as",我会遇到问题-可能是一些异常,或者路径不起作用。这是因为\充当了转义字符吗?我应该如何写路径?

46qrfjad

46qrfjad1#

您可以始终使用:

'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
kupeojn6

kupeojn62#

使用os.path模块。

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

或者使用原始字符串

r"C:\meshes\as"

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

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

ppcbkaq53#

是的,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 will not process escape sequences in string literals prefixed with r or R
>>> r'C:\meshes\as'
'C:\\meshes\\as'
>>> print(r'C:\meshes\as')
C:\meshes\as
  1. Windows上的Python也应该处理正斜杠。
    1.你可以使用os.path.join ...
>>> import os
>>> os.path.join('C:', os.sep, 'meshes', 'as')
'C:\\meshes\\as'

1....或较新的pathlib module

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

9q78igpj4#

使用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 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux
我的经验:

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

Path优于os.path.join(...)

  • 更干净。
  • 少打字。
  • 更容易读取路径(即更具可读性)。
  • 可以使用/连接两个不同的路径(见上文)。
  • 更现代。

path over normpath(...)的优点:

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

wwwo4jvm5#

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

手动操作,如:

WindowsPath("C:\meshes\as")

或使用r或R:

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

相关问题