Python中的规范路径在for循环中被重置

0 投票
6 回答
730 浏览
提问于 2025-04-15 18:49

我正在尝试在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

撰写回答