我试图在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'?
答案 0 :(得分: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
答案 1 :(得分:2)
在Python中,当你说
时>>> s = 'C:\\'
s
包含三个字符:C
,:
和\
。这可以通过以下方式轻松看出:
>>> len(s)
3
在Python中,与许多其他语言一样,反斜杠用于转义某些字符。例如,换行符为\n
,值为0
的字符为\x00
,等等。“实际”反斜杠为\\
。因此,要实际获得两个反斜杠,您需要同时转义两个,给出:
>>> s = 'C:\\\\'
但是,Windows非常满意/
作为分隔符,因此您可以这样做:
>>> s = 'C:/'
答案 2 :(得分:0)
\\
是一个转义序列,它输出\
作为输出。如果要打印C:\\
,则必须使用C:\\\\
作为输入字符串(或使用原始字符串...)。我不明白为什么你会这么想。虽然如果您特别想要,但有不同的选择。
答案 3 :(得分:0)
\\
吗?你可以使用print repr(pth)
答案 4 :(得分:0)
如果可能,请尝试使用os.path.join()创建Windows路径。你不必那么多地插入斜杠。
例如
from os.path import join
rootdir="C:\\"
path1 = join(rootdir,"windows")
path2 = join(rootdir,"Program Files")
lst = [ rootdir , path1, path2 ]
答案 5 :(得分:0)
在Windows上使用/表示完整性(大多数程序都使用两种形式的斜杠),但如果不这样做,则在处理反斜杠路径名时使用r''。
r'C:\My\Windows\Path'
如果你真的想要双反斜杠,那么它也适用:
r'C:\\My\\Escaped\\Path'