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


当前回答

是的,\在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转义序列的完整列表在这里。

有很多种方法可以解决这个问题:

Python将不处理以r或r为前缀的字符串字面量中的转义序列: > > > r 'C: \网格\ ' “C: \ \网格\ \ ' > > >打印(r 'C: \网格\ ') C: \网格\ Windows上的Python也应该处理正斜杠。 你可以使用os.path.join… >>>导入操作系统 > > > os.path。加入(“C:”操作系统。Sep, 'meshes', 'as') “C: \ \网格\ \ ' …或者更新的pathlib模块 >>> from pathlib import路径 >>>路径('C:', '/', 'meshes', 'as') WindowsPath(“C: /网格”)

其他回答

是的,\在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转义序列的完整列表在这里。

有很多种方法可以解决这个问题:

Python将不处理以r或r为前缀的字符串字面量中的转义序列: > > > r 'C: \网格\ ' “C: \ \网格\ \ ' > > >打印(r 'C: \网格\ ') C: \网格\ Windows上的Python也应该处理正斜杠。 你可以使用os.path.join… >>>导入操作系统 > > > os.path。加入(“C:”操作系统。Sep, 'meshes', 'as') “C: \ \网格\ \ ' …或者更新的pathlib模块 >>> from pathlib import路径 >>>路径('C:', '/', 'meshes', 'as') WindowsPath(“C: /网格”)

使用操作系统。路径模块。

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

或者使用原始字符串

r"C:\meshes\as"

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

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

你可以用always:

'C:/mydir'

这在Linux和windows中都适用。 另一种可能性是

'C:\\mydir'

如果你对一些名字有问题,你也可以尝试原始字符串字面量:

r'C:\mydir'

然而,最佳实践是使用操作系统。path模块函数,总是为您的操作系统选择正确的配置:

os.path.join(mydir, myfile)

从python 3.4开始,你也可以使用pathlib模块。这相当于上面的:

pathlib.Path(mydir, myfile)

or

pathlib.Path(mydir) / myfile

使用路径:

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