表示Windows目录(例如"C:\meshes\as")的最佳方法是什么?我一直试图修改一个脚本,但它从来没有工作,因为我似乎不能得到正确的目录,我认为因为'\'作为转义字符?
"C:\meshes\as"
'\'
使用os.path模块。
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
>>> '\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'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\as
Python on Windows should handle forward slashes, too.
You could use os.path.join ...
os.path.join
>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'
... or the newer pathlib module
pathlib
>>> from pathlib import Path >>> Path('C:', '/', 'meshes', 'as') WindowsPath('C:/meshes/as')
使用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快速提示:在Windows、Mac和Linux上处理文件路径的简单方法
我的经验:
os.path.join(...)
normpath(...)
Path(...)
Path相对于os.path.join(...)的优点:
/
path相对于normpath(...)的优点:
Python原始字符串是通过在字符串字面值前加上' r '或' r '来创建的。Python原始字符串将反斜杠()视为字面字符。当我们希望有一个包含反斜杠的字符串并且不希望它被视为转义字符时,这是非常有用的。
手动操作例如:
WindowsPath("C:\meshes\as")
或用r或r:
WindowsPath(r'C:/meshes/as')