繁体   English   中英

Python原始字符串文字,带有斜线-w — r` \\ w`

[英]Python raw string literal with slash-w — r`\w`

在我的机器上使用python 2.7.8和3.4,当我在原始字符串文字中包含反斜杠-W时,它不会被视为原始。 这真的是预期的行为吗?

import os
import sys
wspace = r'D:\Feb-19'
tile = '116o'
ex1 = os.path.join(wspace, r'Work_{}\scratch.gdb'.format(tile))
ex2 = os.path.join(wspace, r'\Work_{}\scratch.gdb'.format(tile))

print(sys.version)

print('''\n--- Expected ---
no-slash-W      D:\Feb-19Work_116o\scratch.gdb
yes-slash-W     D:\Feb-19\Work_116o\scratch.gdb
''')

print('''--- Actual Result ---
no-slash-W      {}
yes-slash-W     {}
'''.format(ex1, ex2))

结果我从PyScripter和远程python解释器获得。 注意9W vs 9\\WD:\\Feb vs D:\\Work

2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)]
--- Expected ---
no-slash-W      D:\Feb-19Work_116o\scratch.gdb
yes-slash-W     D:\Feb-19\Work_116o\scratch.gdb

--- Actual Result ---
no-slash-W      D:\Feb-19\Work_116o\scratch.gdb
yes-slash-W     D:\Work_116o\scratch.gdb

...和命令外壳Python 3:

D:\> python broken-raw-string-example.py
3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AMD64)]

--- Expected ---
no-slash-W      D:\Feb-19Work_116o\scratch.gdb
yes-slash-W     D:\Feb-19\Work_116o\scratch.gdb

--- Actual Result ---
no-slash-W      D:\Feb-19\Work_116o\scratch.gdb
yes-slash-W     D:\Work_116o\scratch.gdb

如果要在其中插入叉子,请在此处进行以下操作: https : //gist.github.com/maphew/9368fe16df751b016bbd

这不是让您绊倒的原始弦乐。 您误解了os.path.join os.path.join 应该在组件不是以1开头时添加一个斜杠。 并且,如果斜杠已经存在,则将其视为绝对路径的开始,该绝对路径将丢弃前面的组件,然后再次“从头开始”开始(在Windows中,驱动器号除外)。 从文档:

如果组件是绝对路径,则所有先前的组件都将被丢弃,并且连接将从绝对路径组件继续。

在Windows上,当遇到绝对路径成分(例如r'\\ foo')时,不会重置驱动器号。 如果组件包含驱动器号,则会丢弃所有先前的组件,并重置驱动器号。 请注意,由于每个驱动器都有一个当前目录,所以os.path.join(“ c:”,“ foo”)表示相对于驱动器C:(c:foo)上当前目录的路径,而不是c:\\ foo 。

因此,对于以下情况,这是正常且正常的:

os.path.join('C:\a', 'b')

在Windows上生成字符串C:\\a\\b (由于必要的反斜杠转义,其代表为"C:\\\\a\\\\b" ),而:

os.path.join('C:\a', '\\b')

'\\\\b'意思是“从当前驱动器开始一个新的绝对路径”,并丢弃\\a替换为\\b 同样,

os.path.join('C:\a', 'b', '\\c', 'd')

当它看到'\\\\c' ,将扔掉ab并从那里建立路径,产生C:\\c\\d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM