[英]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\\W
和D:\\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'
,将扔掉a
和b
并从那里建立路径,产生C:\\c\\d
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.