假设我需要引用路径C:\meshes\as。如果我尝试直接写它,比如"C:\meshes\as",我会遇到问题-可能是一些异常,或者路径不起作用。这是因为\充当了转义字符吗?我应该如何写路径?
C:\meshes\as
"C:\meshes\as"
\
46qrfjad1#
您可以始终使用:
'C:/mydir'
这在linux和windows中都可以工作。其他可能性是
'C:\\mydir'
如果你有一些名字的问题,你也可以尝试原始字符串文字:
r'C:\mydir'
但最佳做法是使用os.path模块函数,始终为您的操作系统选择正确的配置:
os.path
os.path.join(mydir, myfile)
从python 3.4开始,你也可以使用pathlib模块。这和上面的是等价的:
pathlib.Path(mydir, myfile)
或
pathlib.Path(mydir) / myfile
kupeojn62#
使用os.path模块。
os.path.join( "C:", "meshes", "as" )
或者使用原始字符串
r"C:\meshes\as"
我还建议路径或文件名中不要有空格。你可以在字符串中使用双反斜杠。
"C:\\meshes\\as.jpg"
ppcbkaq53#
是的,Python字符串字面量中的\表示转义序列的开始。在你的路径中,你有一个有效的两个字符的转义序列\a,它被折叠成 * 一个 * 字符,即ASCII Bell:
\a
>>> '\a' '\x07' >>> len('\a') 1 >>> 'C:\meshes\as' 'C:\\meshes\x07s' >>> print('C:\meshes\as') C:\meshess
其他常见的转义序列包括\t(制表符),\n(换行),\r(回车):
\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转义序列的完整列表在这里。有很多方法可以解决这个问题:
r
R
>>> r'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\as
os.path.join
>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'
1....或较新的pathlib module
pathlib
>>> from pathlib import Path >>> Path('C:', '/', 'meshes', 'as') WindowsPath('C:/meshes/as')
9q78igpj4#
使用Path:
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我的经验:
os.path.join(...)
normpath(...)
Path(...)
Path优于os.path.join(...):
/
path over normpath(...)的优点:
wwwo4jvm5#
Python raw string是通过在字符串字面量前面加上'r'或'R'来创建的。Python raw string将backslash()视为字面字符。当我们想要一个包含反斜杠的字符串并且不希望它被视为转义字符时,这很有用。
手动操作,如:
WindowsPath("C:\meshes\as")
或使用r或R:
WindowsPath(r'C:/meshes/as')
5条答案
按热度按时间46qrfjad1#
您可以始终使用:
这在linux和windows中都可以工作。其他可能性是
如果你有一些名字的问题,你也可以尝试原始字符串文字:
但最佳做法是使用
os.path
模块函数,始终为您的操作系统选择正确的配置:从python 3.4开始,你也可以使用pathlib模块。这和上面的是等价的:
或
kupeojn62#
使用
os.path
模块。或者使用原始字符串
我还建议路径或文件名中不要有空格。你可以在字符串中使用双反斜杠。
ppcbkaq53#
是的,Python字符串字面量中的
\
表示转义序列的开始。在你的路径中,你有一个有效的两个字符的转义序列\a
,它被折叠成 * 一个 * 字符,即ASCII Bell:其他常见的转义序列包括
\t
(制表符),\n
(换行),\r
(回车):正如你所看到的,在所有这些例子中,反斜杠和字面量中的下一个字符被组合在一起,形成最终字符串中的一个字符。Python转义序列的完整列表在这里。
有很多方法可以解决这个问题:
r
orR
:1.你可以使用
os.path.join
...1....或较新的
pathlib
module9q78igpj4#
使用
Path
:Path
接受一个类似于路径的字符串,并根据当前操作系统(Windows或Linux)调整所有内容。例如,在Linux上,它会将所有反斜杠转换为正斜杠,而在Windows上则相反。全文:Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux
我的经验:
os.path.join(...)
,然后切换到normpath(...)
,最后切换到Path(...)
。在使用了所有三个之后,Path是所有世界中最好的。Path优于
os.path.join(...)
:/
连接两个不同的路径(见上文)。path over
normpath(...)
的优点:/
连接路径,而不必回退到os.path.join(...)
,并使用嵌套的normpath调用来解决问题。wwwo4jvm5#
Python raw string是通过在字符串字面量前面加上'r'或'R'来创建的。Python raw string将backslash()视为字面字符。当我们想要一个包含反斜杠的字符串并且不希望它被视为转义字符时,这很有用。
手动操作,如:
或使用r或R: