Python中的规范路径在for循环中被重置
我正在尝试在Windows上获取一个标准化的路径。这些路径存储在一个列表中,我正在循环遍历这些路径,代码如下:
>>> lst = ['C:\\', 'C:\\Windows', 'C:\\Program Files']
>>> lst
['C:\\', 'C:\\Windows', 'C:\\Program Files']
>>> for pth in lst:
... print pth
...
C:\
C:\Windows
C:\Program Files
注意,输出中的反斜杠少了一个,C:\应该是C:\\。
即使我在循环中像下面这样标准化路径,输出也没有变化:
>>> import os
>>> for pth in lst:
... print os.path.normpath(pth)
...
C:\
C:\Windows
C:\Program Files
有没有人能给个解决办法?谢谢!
更新
看起来关于原始字符串的建议是处理这个问题的更好方法。但是在for循环中如何指定字符串为原始字符串呢?比如:
for pth in lst:
raw_str = rpth
显然,上面的写法不行。我该怎么做呢?r'path/to/file'?
6 个回答
0
\\
是一个转义序列,用来输出 \
这个字符。如果你想打印出 C:\\
,那么你需要输入 C:\\\\
这个字符串(或者使用原始字符串...)。我不太明白你为什么会想这样做。不过如果你确实想要这样,有不同的方法可以实现。
2
在Python中,当你写
>>> s = 'C:\\'
s
里有三个字符:C
、:
和\
。这一点可以通过以下方式轻松看出来:
>>> len(s)
3
在Python和很多其他编程语言中,反斜杠(\)用来处理一些特殊字符。比如,换行用\n
表示,值为0
的字符用\x00
表示,等等。而一个“真实的”反斜杠则是\\
。所以,如果你想得到两个反斜杠,你需要对它们都进行转义,写成:
>>> s = 'C:\\\\'
不过,Windows系统也可以用/
作为路径分隔符,所以你可以这样写:
>>> s = 'C:/'
3
双斜杠其实就是字符串转义的意思——在字符串中你需要对斜杠进行转义。也就是说,如果你在循环之前打印 lst[0]
,它会显示没有斜杠的内容。如果你想在字符串中真正包含一个双斜杠,可以使用原始字符串的写法:
>>> lst = ['C:\\', 'C:\\Windows', 'C:\\Program Files']
>>> lst[0]
'C:\\'
>>> print lst[0]
C:\
>>> lst2 = [r'C:\\', r'C:\\Windows', r'C:\\Program Files']
>>> lst2[0]
'C:\\\\'
>>> print lst2[0]
C:\\
编辑:如果你 想要 把斜杠变成双斜杠,可以简单地用字符串替换的方法:
>>> x = 'C:\\Windows'
>>> print x
C:\Windows
>>> x = x.replace('\\', '\\\\')
>>> print x
C:\\Windows